Compare commits

...

10 Commits

Author SHA1 Message Date
titor-z
6b5e3580fb 自我修改。
Some checks failed
Build / build (18.x) (push) Has been cancelled
Build / build (20.x) (push) Has been cancelled
2025-03-15 01:21:27 +08:00
1ilit
fa1e736436
Add speed insights (#359) 2025-03-12 01:40:39 +04:00
1ilit
6cc9942062
Fix hotkeys (#357)
* Fix hotkeys(#356)

* Check for meta key(#356)
2025-03-07 21:11:50 +04:00
Tamás Balog
e1ca9b0cd6
Add missing entries to the Hungarian translations (#354) 2025-03-05 21:27:50 +04:00
1ilit
885eb8298f
Deprecate ddb export(#353) 2025-03-04 22:58:39 +04:00
1ilit
8fe4ec5ac8
Update README.md 2025-03-03 23:52:15 +04:00
1ilit
0e54dbed1b
Remove funding (#352)
* Remove funding

* Remove support us from landing page
2025-03-03 23:50:50 +04:00
1ilit
0d813fc0dd
Import from and export to DBML (#351)
* Add export and import functions

* Add import from dbml to control panel

* Add the import key back into locales and show import error

* Parse relationships
2025-03-01 22:24:53 +04:00
David
e3877ef982
Add romanian locale (#348) 2025-02-26 21:27:25 +04:00
Swapnil Ingale
799a79e8a8
Add translations for Uyghurs language (#345)
* Add translations for Uyghurs language

* Add Uyghurs Language Properly

* Remove First Line
2025-02-25 23:02:49 +04:00
61 changed files with 3687 additions and 2688 deletions

2
.github/FUNDING.yml vendored
View File

@ -1,2 +0,0 @@
open_collective: drawdb
buy_me_a_coffee: drawdb

View File

@ -15,9 +15,6 @@
<a href="https://x.com/drawDB_" style="display: flex; align-items: center;"> <a href="https://x.com/drawDB_" style="display: flex; align-items: center;">
<img src="https://img.shields.io/badge/Follow%20us%20on%20X-blue?logo=X" alt="Follow us on X"/> <img src="https://img.shields.io/badge/Follow%20us%20on%20X-blue?logo=X" alt="Follow us on X"/>
</a> </a>
<a href="https://buymeacoffee.com/drawdb" style="display: flex; align-items: center;">
<img src="https://img.shields.io/badge/Support%20us-grey?logo=buymeacoffee" alt="Support us"/>
</a>
</div> </div>
<h3 align="center"><img width="700" style="border-radius:5px;" alt="demo" src="drawdb.png"></h3> <h3 align="center"><img width="700" style="border-radius:5px;" alt="demo" src="drawdb.png"></h3>

89
package-lock.json generated
View File

@ -10,12 +10,14 @@
"dependencies": { "dependencies": {
"@codemirror/lang-json": "^6.0.1", "@codemirror/lang-json": "^6.0.1",
"@codemirror/lang-sql": "^6.6.3", "@codemirror/lang-sql": "^6.6.3",
"@dbml/core": "^3.9.7-alpha.0",
"@douyinfe/semi-ui": "^2.51.3", "@douyinfe/semi-ui": "^2.51.3",
"@lexical/react": "^0.12.5", "@lexical/react": "^0.12.5",
"@uiw/codemirror-theme-github": "^4.21.25", "@uiw/codemirror-theme-github": "^4.21.25",
"@uiw/codemirror-theme-vscode": "^4.21.25", "@uiw/codemirror-theme-vscode": "^4.21.25",
"@uiw/react-codemirror": "^4.21.25", "@uiw/react-codemirror": "^4.21.25",
"@vercel/analytics": "^1.2.2", "@vercel/analytics": "^1.2.2",
"@vercel/speed-insights": "^1.2.0",
"axios": "^1.7.4", "axios": "^1.7.4",
"classnames": "^2.5.1", "classnames": "^2.5.1",
"dexie": "^3.2.4", "dexie": "^3.2.4",
@ -536,6 +538,34 @@
"w3c-keyname": "^2.2.4" "w3c-keyname": "^2.2.4"
} }
}, },
"node_modules/@dbml/core": {
"version": "3.9.7-alpha.0",
"resolved": "https://registry.npmjs.org/@dbml/core/-/core-3.9.7-alpha.0.tgz",
"integrity": "sha512-KGXr7p80XuoqQJumOs2+RHRBBH703gNxM0uiEvT1FF945+H4LriNK4ZgbXqe2ObmRNbwF2/TYFou+lqkh+tbUw==",
"license": "Apache-2.0",
"dependencies": {
"@dbml/parse": "^3.9.7-alpha.0",
"antlr4": "^4.13.1",
"lodash": "^4.17.15",
"parsimmon": "^1.13.0",
"pluralize": "^8.0.0"
},
"engines": {
"node": ">=16"
}
},
"node_modules/@dbml/parse": {
"version": "3.9.7-alpha.0",
"resolved": "https://registry.npmjs.org/@dbml/parse/-/parse-3.9.7-alpha.0.tgz",
"integrity": "sha512-QT0rmbbnjn6hKbGXMhvdw62Gn8YgXjvG5a+0+9EoZFpFdl/Y8VSPlHqpHbdMas2kOpusMgpa1YRFaTMApZM7Mw==",
"license": "Apache-2.0",
"dependencies": {
"lodash": "^4.17.21"
},
"peerDependencies": {
"lodash": "^4.17.21"
}
},
"node_modules/@dnd-kit/accessibility": { "node_modules/@dnd-kit/accessibility": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.0.tgz", "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.0.tgz",
@ -2274,6 +2304,41 @@
} }
} }
}, },
"node_modules/@vercel/speed-insights": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@vercel/speed-insights/-/speed-insights-1.2.0.tgz",
"integrity": "sha512-y9GVzrUJ2xmgtQlzFP2KhVRoCglwfRQgjyfY607aU0hh0Un6d0OUyrJkjuAlsV18qR4zfoFPs/BiIj9YDS6Wzw==",
"hasInstallScript": true,
"license": "Apache-2.0",
"peerDependencies": {
"@sveltejs/kit": "^1 || ^2",
"next": ">= 13",
"react": "^18 || ^19 || ^19.0.0-rc",
"svelte": ">= 4",
"vue": "^3",
"vue-router": "^4"
},
"peerDependenciesMeta": {
"@sveltejs/kit": {
"optional": true
},
"next": {
"optional": true
},
"react": {
"optional": true
},
"svelte": {
"optional": true
},
"vue": {
"optional": true
},
"vue-router": {
"optional": true
}
}
},
"node_modules/@vitejs/plugin-react": { "node_modules/@vitejs/plugin-react": {
"version": "4.2.1", "version": "4.2.1",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz",
@ -2351,6 +2416,15 @@
"node": ">=4" "node": ">=4"
} }
}, },
"node_modules/antlr4": {
"version": "4.13.2",
"resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.13.2.tgz",
"integrity": "sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=16"
}
},
"node_modules/any-promise": { "node_modules/any-promise": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
@ -5065,6 +5139,12 @@
"node": ">=6" "node": ">=6"
} }
}, },
"node_modules/parsimmon": {
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/parsimmon/-/parsimmon-1.18.1.tgz",
"integrity": "sha512-u7p959wLfGAhJpSDJVYXoyMCXWYwHia78HhRBWqk7AIbxdmlrfdp5wX0l3xv/iTSH5HvhN9K7o26hwwpgS5Nmw==",
"license": "MIT"
},
"node_modules/path-exists": { "node_modules/path-exists": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@ -5139,6 +5219,15 @@
"node": ">= 6" "node": ">= 6"
} }
}, },
"node_modules/pluralize": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
"integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/postcss": { "node_modules/postcss": {
"version": "8.4.41", "version": "8.4.41",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",

View File

@ -12,12 +12,14 @@
"dependencies": { "dependencies": {
"@codemirror/lang-json": "^6.0.1", "@codemirror/lang-json": "^6.0.1",
"@codemirror/lang-sql": "^6.6.3", "@codemirror/lang-sql": "^6.6.3",
"@dbml/core": "^3.9.7-alpha.0",
"@douyinfe/semi-ui": "^2.51.3", "@douyinfe/semi-ui": "^2.51.3",
"@lexical/react": "^0.12.5", "@lexical/react": "^0.12.5",
"@uiw/codemirror-theme-github": "^4.21.25", "@uiw/codemirror-theme-github": "^4.21.25",
"@uiw/codemirror-theme-vscode": "^4.21.25", "@uiw/codemirror-theme-vscode": "^4.21.25",
"@uiw/react-codemirror": "^4.21.25", "@uiw/react-codemirror": "^4.21.25",
"@vercel/analytics": "^1.2.2", "@vercel/analytics": "^1.2.2",
"@vercel/speed-insights": "^1.2.0",
"axios": "^1.7.4", "axios": "^1.7.4",
"classnames": "^2.5.1", "classnames": "^2.5.1",
"dexie": "^3.2.4", "dexie": "^3.2.4",

View File

@ -450,7 +450,7 @@ export default function Canvas() {
(e) => { (e) => {
e.preventDefault(); e.preventDefault();
if (e.ctrlKey) { if (e.ctrlKey || e.metaKey) {
// How "eager" the viewport is to // How "eager" the viewport is to
// center the cursor's coordinates // center the cursor's coordinates
const eagernessFactor = 0.05; const eagernessFactor = 0.05;

View File

@ -24,7 +24,6 @@ import {
Popconfirm, Popconfirm,
} from "@douyinfe/semi-ui"; } from "@douyinfe/semi-ui";
import { toPng, toJpeg, toSvg } from "html-to-image"; import { toPng, toJpeg, toSvg } from "html-to-image";
import { saveAs } from "file-saver";
import { import {
jsonToMySQL, jsonToMySQL,
jsonToPostgreSQL, jsonToPostgreSQL,
@ -40,6 +39,7 @@ import {
MODAL, MODAL,
SIDESHEET, SIDESHEET,
DB, DB,
IMPORT_FROM,
} from "../../data/constants"; } from "../../data/constants";
import jsPDF from "jspdf"; import jsPDF from "jspdf";
import { useHotkeys } from "react-hotkeys-hook"; import { useHotkeys } from "react-hotkeys-hook";
@ -74,6 +74,7 @@ import { isRtl } from "../../i18n/utils/rtl";
import { jsonToDocumentation } from "../../utils/exportAs/documentation"; import { jsonToDocumentation } from "../../utils/exportAs/documentation";
import { IdContext } from "../Workspace"; import { IdContext } from "../Workspace";
import { socials } from "../../data/socials"; import { socials } from "../../data/socials";
import { toDBML } from "../../utils/exportAs/dbml";
export default function ControlPanel({ export default function ControlPanel({
diagramId, diagramId,
@ -91,6 +92,7 @@ export default function ControlPanel({
filename: `${title}_${new Date().toISOString()}`, filename: `${title}_${new Date().toISOString()}`,
extension: "", extension: "",
}); });
const [importFrom, setImportFrom] = useState(IMPORT_FROM.JSON);
const { saveState, setSaveState } = useSaveState(); const { saveState, setSaveState } = useSaveState();
const { layout, setLayout } = useLayout(); const { layout, setLayout } = useLayout();
const { settings, setSettings } = useSettings(); const { settings, setSettings } = useSettings();
@ -788,9 +790,18 @@ export default function ControlPanel({
.catch(() => Toast.error(t("oops_smth_went_wrong"))); .catch(() => Toast.error(t("oops_smth_went_wrong")));
}, },
}, },
import_diagram: { import_from: {
function: fileImport, children: [
shortcut: "Ctrl+I", {
JSON: fileImport,
},
{
DBML: () => {
setModal(MODAL.IMPORT);
setImportFrom(IMPORT_FROM.DBML);
},
},
],
}, },
import_from_source: { import_from_source: {
...(database === DB.GENERIC && { ...(database === DB.GENERIC && {
@ -963,6 +974,21 @@ export default function ControlPanel({
setModal(MODAL.IMG); setModal(MODAL.IMG);
}, },
}, },
{
SVG: () => {
const filter = (node) => node.tagName !== "i";
toSvg(document.getElementById("canvas"), { filter: filter }).then(
function (dataUrl) {
setExportData((prev) => ({
...prev,
data: dataUrl,
extension: "svg",
}));
},
);
setModal(MODAL.IMG);
},
},
{ {
JSON: () => { JSON: () => {
setModal(MODAL.CODE); setModal(MODAL.CODE);
@ -988,19 +1014,19 @@ export default function ControlPanel({
}, },
}, },
{ {
SVG: () => { DBML: () => {
const filter = (node) => node.tagName !== "i"; setModal(MODAL.CODE);
toSvg(document.getElementById("canvas"), { filter: filter }).then( const result = toDBML({
function (dataUrl) { tables,
relationships,
enums,
});
setExportData((prev) => ({ setExportData((prev) => ({
...prev, ...prev,
data: dataUrl, data: result,
extension: "svg", extension: "dbml",
})); }));
}, },
);
setModal(MODAL.IMG);
},
}, },
{ {
PDF: () => { PDF: () => {
@ -1022,30 +1048,6 @@ export default function ControlPanel({
}); });
}, },
}, },
{
DRAWDB: () => {
const result = JSON.stringify(
{
author: "Unnamed",
title: title,
date: new Date().toISOString(),
tables: tables,
relationships: relationships,
notes: notes,
subjectAreas: areas,
database: database,
...(databases[database].hasTypes && { types: types }),
...(databases[database].hasEnums && { enums: enums }),
},
null,
2,
);
const blob = new Blob([result], {
type: "text/plain;charset=utf-8",
});
saveAs(blob, `${exportData.filename}.ddb`);
},
},
{ {
MERMAID: () => { MERMAID: () => {
setModal(MODAL.CODE); setModal(MODAL.CODE);
@ -1361,35 +1363,35 @@ export default function ControlPanel({
}, },
}; };
useHotkeys("ctrl+i, meta+i", fileImport, { preventDefault: true }); useHotkeys("mod+i", fileImport, { preventDefault: true });
useHotkeys("ctrl+z, meta+z", undo, { preventDefault: true }); useHotkeys("mod+z", undo, { preventDefault: true });
useHotkeys("ctrl+y, meta+y", redo, { preventDefault: true }); useHotkeys("mod+y", redo, { preventDefault: true });
useHotkeys("ctrl+s, meta+s", save, { preventDefault: true }); useHotkeys("mod+s", save, { preventDefault: true });
useHotkeys("ctrl+o, meta+o", open, { preventDefault: true }); useHotkeys("mod+o", open, { preventDefault: true });
useHotkeys("ctrl+e, meta+e", edit, { preventDefault: true }); useHotkeys("mod+e", edit, { preventDefault: true });
useHotkeys("ctrl+d, meta+d", duplicate, { preventDefault: true }); useHotkeys("mod+d", duplicate, { preventDefault: true });
useHotkeys("ctrl+c, meta+c", copy, { preventDefault: true }); useHotkeys("mod+c", copy, { preventDefault: true });
useHotkeys("ctrl+v, meta+v", paste, { preventDefault: true }); useHotkeys("mod+v", paste, { preventDefault: true });
useHotkeys("ctrl+x, meta+x", cut, { preventDefault: true }); useHotkeys("mod+x", cut, { preventDefault: true });
useHotkeys("delete", del, { preventDefault: true }); useHotkeys("delete", del, { preventDefault: true });
useHotkeys("ctrl+shift+g, meta+shift+g", viewGrid, { preventDefault: true }); useHotkeys("mod+shift+g", viewGrid, { preventDefault: true });
useHotkeys("ctrl+up, meta+up", zoomIn, { preventDefault: true }); useHotkeys("mod+up", zoomIn, { preventDefault: true });
useHotkeys("ctrl+down, meta+down", zoomOut, { preventDefault: true }); useHotkeys("mod+down", zoomOut, { preventDefault: true });
useHotkeys("ctrl+shift+m, meta+shift+m", viewStrictMode, { useHotkeys("mod+shift+m", viewStrictMode, {
preventDefault: true, preventDefault: true,
}); });
useHotkeys("ctrl+shift+f, meta+shift+f", viewFieldSummary, { useHotkeys("mod+shift+f", viewFieldSummary, {
preventDefault: true, preventDefault: true,
}); });
useHotkeys("ctrl+shift+s, meta+shift+s", saveDiagramAs, { useHotkeys("mod+shift+s", saveDiagramAs, {
preventDefault: true, preventDefault: true,
}); });
useHotkeys("ctrl+alt+c, meta+alt+c", copyAsImage, { preventDefault: true }); useHotkeys("mod+alt+c", copyAsImage, { preventDefault: true });
useHotkeys("ctrl+r, meta+r", resetView, { preventDefault: true }); useHotkeys("mod+r", resetView, { preventDefault: true });
useHotkeys("ctrl+h, meta+h", () => window.open(socials.docs, "_blank"), { useHotkeys("mod+h", () => window.open(socials.docs, "_blank"), {
preventDefault: true, preventDefault: true,
}); });
useHotkeys("ctrl+alt+w, meta+alt+w", fitWindow, { preventDefault: true }); useHotkeys("mod+alt+w", fitWindow, { preventDefault: true });
return ( return (
<> <>
@ -1423,6 +1425,7 @@ export default function ControlPanel({
setTitle={setTitle} setTitle={setTitle}
setDiagramId={setDiagramId} setDiagramId={setDiagramId}
setModal={setModal} setModal={setModal}
importFrom={importFrom}
importDb={importDb} importDb={importDb}
/> />
<Sidesheet <Sidesheet

View File

@ -3,7 +3,7 @@ import {
jsonDiagramIsValid, jsonDiagramIsValid,
} from "../../../utils/validateSchema"; } from "../../../utils/validateSchema";
import { Upload, Banner } from "@douyinfe/semi-ui"; import { Upload, Banner } from "@douyinfe/semi-ui";
import { DB, STATUS } from "../../../data/constants"; import { DB, IMPORT_FROM, STATUS } from "../../../data/constants";
import { import {
useAreas, useAreas,
useEnums, useEnums,
@ -12,8 +12,14 @@ import {
useTypes, useTypes,
} from "../../../hooks"; } from "../../../hooks";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { fromDBML } from "../../../utils/importFrom/dbml";
export default function ImportDiagram({ setImportData, error, setError }) { export default function ImportDiagram({
setImportData,
error,
setError,
importFrom,
}) {
const { areas } = useAreas(); const { areas } = useAreas();
const { notes } = useNotes(); const { notes } = useNotes();
const { tables, relationships, database } = useDiagram(); const { tables, relationships, database } = useDiagram();
@ -32,17 +38,7 @@ export default function ImportDiagram({ setImportData, error, setError }) {
); );
}; };
return ( const loadJsonData = (file, e) => {
<div>
<Upload
action="#"
beforeUpload={({ file, fileList }) => {
const f = fileList[0].fileInstance;
if (!f) {
return;
}
const reader = new FileReader();
reader.onload = async (e) => {
let jsonObject = null; let jsonObject = null;
try { try {
jsonObject = JSON.parse(e.target.result); jsonObject = JSON.parse(e.target.result);
@ -53,21 +49,20 @@ export default function ImportDiagram({ setImportData, error, setError }) {
}); });
return; return;
} }
if (f.type === "application/json") {
if (file.type === "application/json") {
if (!jsonDiagramIsValid(jsonObject)) { if (!jsonDiagramIsValid(jsonObject)) {
setError({ setError({
type: STATUS.ERROR, type: STATUS.ERROR,
message: message: "The file is missing necessary properties for a diagram.",
"The file is missing necessary properties for a diagram.",
}); });
return; return;
} }
} else if (f.name.split(".").pop() === "ddb") { } else if (file.name.split(".").pop() === "ddb") {
if (!ddbDiagramIsValid(jsonObject)) { if (!ddbDiagramIsValid(jsonObject)) {
setError({ setError({
type: STATUS.ERROR, type: STATUS.ERROR,
message: message: "The file is missing necessary properties for a diagram.",
"The file is missing necessary properties for a diagram.",
}); });
return; return;
} }
@ -129,6 +124,53 @@ export default function ImportDiagram({ setImportData, error, setError }) {
}); });
} }
}; };
const loadDBMLData = (e) => {
try {
setImportData(fromDBML(e.target.result));
} catch (error) {
const message = `${error.diags[0].name} [Ln ${error.diags[0].location.start.line}, Col ${error.diags[0].location.start.column}]: ${error.diags[0].message}`;
setError({ type: STATUS.ERROR, message });
}
};
const getAcceptableFileTypes = () => {
switch (importFrom) {
case IMPORT_FROM.JSON:
return "application/json,.ddb";
case IMPORT_FROM.DBML:
return ".dbml";
default:
return "";
}
};
const getDragSubText = () => {
switch (importFrom) {
case IMPORT_FROM.JSON:
return `${t("supported_types")} JSON, DDB`;
case IMPORT_FROM.DBML:
return `${t("supported_types")} DBML`;
default:
return "";
}
};
return (
<div>
<Upload
action="#"
beforeUpload={({ file, fileList }) => {
const f = fileList[0].fileInstance;
if (!f) {
return;
}
const reader = new FileReader();
reader.onload = async (e) => {
if (importFrom == IMPORT_FROM.JSON) loadJsonData(f, e);
if (importFrom == IMPORT_FROM.DBML) loadDBMLData(e);
};
reader.readAsText(f); reader.readAsText(f);
return { return {
@ -140,8 +182,8 @@ export default function ImportDiagram({ setImportData, error, setError }) {
}} }}
draggable={true} draggable={true}
dragMainText={t("drag_and_drop_files")} dragMainText={t("drag_and_drop_files")}
dragSubText={t("support_json_and_ddb")} dragSubText={getDragSubText()}
accept="application/json,.ddb" accept={getAcceptableFileTypes()}
onRemove={() => onRemove={() =>
setError({ setError({
type: STATUS.NONE, type: STATUS.NONE,

View File

@ -48,6 +48,7 @@ export default function Modal({
exportData, exportData,
setExportData, setExportData,
importDb, importDb,
importFrom,
}) { }) {
const { t, i18n } = useTranslation(); const { t, i18n } = useTranslation();
const { setTables, setRelationships, database, setDatabase } = useDiagram(); const { setTables, setRelationships, database, setDatabase } = useDiagram();
@ -75,8 +76,8 @@ export default function Modal({
const overwriteDiagram = () => { const overwriteDiagram = () => {
setTables(importData.tables); setTables(importData.tables);
setRelationships(importData.relationships); setRelationships(importData.relationships);
setAreas(importData.subjectAreas); setAreas(importData.subjectAreas ?? []);
setNotes(importData.notes); setNotes(importData.notes ?? []);
if (importData.title) { if (importData.title) {
setTitle(importData.title); setTitle(importData.title);
} }
@ -247,6 +248,7 @@ export default function Modal({
setImportData={setImportData} setImportData={setImportData}
error={error} error={error}
setError={setError} setError={setError}
importFrom={importFrom}
/> />
); );
case MODAL.IMPORT_SRC: case MODAL.IMPORT_SRC:

View File

@ -24,25 +24,25 @@ export default function Navbar() {
.scrollIntoView({ behavior: "smooth" }) .scrollIntoView({ behavior: "smooth" })
} }
> >
Features 功能
</Link> </Link>
<Link <Link
to="/editor" to="/editor"
className="text-lg font-semibold hover:text-sky-800 transition-colors duration-300" className="text-lg font-semibold hover:text-sky-800 transition-colors duration-300"
> >
Editor 编辑器
</Link> </Link>
<Link <Link
to="/templates" to="/templates"
className="text-lg font-semibold hover:text-sky-800 transition-colors duration-300" className="text-lg font-semibold hover:text-sky-800 transition-colors duration-300"
> >
Templates 模板
</Link> </Link>
<Link <Link
to={socials.docs} to={socials.docs}
className="text-lg font-semibold hover:text-sky-800 transition-colors duration-300" className="text-lg font-semibold hover:text-sky-800 transition-colors duration-300"
> >
Docs 文档
</Link> </Link>
</div> </div>
<div className="md:hidden block space-x-3 ms-12"> <div className="md:hidden block space-x-3 ms-12">
@ -100,28 +100,28 @@ export default function Navbar() {
setOpenMenu(false); setOpenMenu(false);
}} }}
> >
Features 功能
</Link> </Link>
<hr /> <hr />
<Link <Link
to="/editor" to="/editor"
className="hover:bg-zinc-100 block p-3 text-base font-semibold" className="hover:bg-zinc-100 block p-3 text-base font-semibold"
> >
Editor 编辑器
</Link> </Link>
<hr /> <hr />
<Link <Link
to="/templates" to="/templates"
className="hover:bg-zinc-100 block p-3 text-base font-semibold" className="hover:bg-zinc-100 block p-3 text-base font-semibold"
> >
Templates 模板
</Link> </Link>
<hr /> <hr />
<Link <Link
to={socials.docs} to={socials.docs}
className="hover:bg-zinc-100 block p-3 text-base font-semibold" className="hover:bg-zinc-100 block p-3 text-base font-semibold"
> >
Docs 文档
</Link> </Link>
</SideSheet> </SideSheet>
</> </>

View File

@ -115,3 +115,8 @@ export const DB = {
MARIADB: "mariadb", MARIADB: "mariadb",
GENERIC: "generic", GENERIC: "generic",
}; };
export const IMPORT_FROM = {
JSON: 0,
DBML: 1,
};

View File

@ -12,6 +12,7 @@ import { fa, persian } from "./locales/fa";
import { hi, hindi } from "./locales/hi"; import { hi, hindi } from "./locales/hi";
import { uk, ukrainian } from "./locales/uk"; import { uk, ukrainian } from "./locales/uk";
import { ru, russian } from "./locales/ru"; import { ru, russian } from "./locales/ru";
import { ro, romanian } from "./locales/ro";
import { tr, turkish } from "./locales/tr"; import { tr, turkish } from "./locales/tr";
import { mr, marathi } from "./locales/mr"; import { mr, marathi } from "./locales/mr";
import { fr, french } from "./locales/fr"; import { fr, french } from "./locales/fr";
@ -36,6 +37,7 @@ import { sv, swedish } from "./locales/sv-se";
import { ur, urdu } from "./locales/ur"; import { ur, urdu } from "./locales/ur";
import { jp, japanese} from "./locales/jp" import { jp, japanese} from "./locales/jp"
import {ne, nepali} from "./locales/ne" import {ne, nepali} from "./locales/ne"
import {ug, uyghur} from "./locales/ug";
export const languages = [ export const languages = [
english, english,
@ -50,6 +52,7 @@ export const languages = [
marathi, marathi,
ukrainian, ukrainian,
russian, russian,
romanian,
turkish, turkish,
french, french,
punjabi, punjabi,
@ -72,7 +75,8 @@ export const languages = [
swedish, swedish,
urdu, urdu,
japanese, japanese,
nepali nepali,
uyghur
].sort((a, b) => a.name.localeCompare(b.name)); ].sort((a, b) => a.name.localeCompare(b.name));
i18n i18n
@ -97,6 +101,7 @@ i18n
mr, mr,
uk, uk,
ru, ru,
ro,
tr, tr,
fr, fr,
pa, pa,
@ -119,7 +124,8 @@ i18n
sv, sv,
ur, ur,
jp, jp,
ne ne,
ug
}, },
}); });

View File

@ -7,6 +7,7 @@ const arabic = {
const ar = { const ar = {
translation: { translation: {
report_bug: "الإبلاغ عن خطأ", report_bug: "الإبلاغ عن خطأ",
import_from: "استيراد",
import: "استيراد", import: "استيراد",
file: "ملف", file: "ملف",
new: "جديد", new: "جديد",
@ -105,8 +106,7 @@ const ar = {
no_types: "لا توجد أنواع", no_types: "لا توجد أنواع",
no_types_text: "اصنع أنواع البيانات المخصصة الخاصة بك", no_types_text: "اصنع أنواع البيانات المخصصة الخاصة بك",
no_issues: "لم يتم اكتشاف أي مشكلات.", no_issues: "لم يتم اكتشاف أي مشكلات.",
strict_mode_is_on_no_issues: strict_mode_is_on_no_issues: "وضع صارم معطل لذا لن يتم عرض أي مشكلات.",
"وضع صارم معطل لذا لن يتم عرض أي مشكلات.",
name: "الاسم", name: "الاسم",
type: "النوع", type: "النوع",
null: "فارغ", null: "فارغ",
@ -157,12 +157,10 @@ const ar = {
confirm: "تأكيد", confirm: "تأكيد",
last_modified: "آخر تعديل", last_modified: "آخر تعديل",
drag_and_drop_files: "اسحب وأسقط الملف هنا أو انقر للتحميل.", drag_and_drop_files: "اسحب وأسقط الملف هنا أو انقر للتحميل.",
support_json_and_ddb: "تدعم ملفات JSON و DDB",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"قم بتحميل ملف SQL لتوليد الجداول والأعمدة تلقائيًا.", "قم بتحميل ملف SQL لتوليد الجداول والأعمدة تلقائيًا.",
overwrite_existing_diagram: "الكتابة فوق المخطط الحالي", overwrite_existing_diagram: "الكتابة فوق المخطط الحالي",
only_mysql_supported: only_mysql_supported: "*في الوقت الحالي، يتم دعم تحميل نصوص MySQL فقط.",
"*في الوقت الحالي، يتم دعم تحميل نصوص MySQL فقط.",
blank: "فارغ", blank: "فارغ",
filename: "اسم الملف", filename: "اسم الملف",
table_w_no_name: "تم إعلان جدول بدون اسم", table_w_no_name: "تم إعلان جدول بدون اسم",

View File

@ -7,6 +7,7 @@ const bengali = {
const bn = { const bn = {
translation: { translation: {
report_bug: "বাগ রিপোর্ট করুন", report_bug: "বাগ রিপোর্ট করুন",
import_from: "ইম্পোর্ট করুন",
import: "ইম্পোর্ট করুন", import: "ইম্পোর্ট করুন",
file: "ফাইল", file: "ফাইল",
new: "নতুন", new: "নতুন",
@ -160,7 +161,6 @@ const bn = {
last_modified: "শেষ সংশোধন", last_modified: "শেষ সংশোধন",
drag_and_drop_files: drag_and_drop_files:
"ফাইলটি এখানে ড্র্যাগ এবং ড্রপ করুন বা আপলোড করতে ক্লিক করুন।", "ফাইলটি এখানে ড্র্যাগ এবং ড্রপ করুন বা আপলোড করতে ক্লিক করুন।",
support_json_and_ddb: "JSON এবং DDB ফাইলগুলি সমর্থিত",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"আপনার টেবিল এবং কলামগুলি স্বয়ংক্রিয়ভাবে তৈরি করতে একটি SQL ফাইল আপলোড করুন।", "আপনার টেবিল এবং কলামগুলি স্বয়ংক্রিয়ভাবে তৈরি করতে একটি SQL ফাইল আপলোড করুন।",
overwrite_existing_diagram: "বিদ্যমান ডায়াগ্রামটি ওভাররাইট করুন", overwrite_existing_diagram: "বিদ্যমান ডায়াগ্রামটি ওভাররাইট করুন",

View File

@ -7,6 +7,7 @@ const danish = {
const da = { const da = {
translation: { translation: {
report_bug: "Rapportér en fejl", report_bug: "Rapportér en fejl",
import_from: "Importér",
import: "Importér", import: "Importér",
file: "Fil", file: "Fil",
new: "Ny", new: "Ny",
@ -109,7 +110,8 @@ const da = {
autoincrement: "Auto-inkrementel", autoincrement: "Auto-inkrementel",
default_value: "Standardværdi", default_value: "Standardværdi",
check: "Tjek udtryk", check: "Tjek udtryk",
this_will_appear_as_is: "*Dette vil fremstå i det generede script som det er.", this_will_appear_as_is:
"*Dette vil fremstå i det generede script som det er.",
comment: "Kommentar", comment: "Kommentar",
add_field: "Tilføj felt", add_field: "Tilføj felt",
values: "værdier", values: "værdier",
@ -150,7 +152,6 @@ const da = {
confirm: "Bekræft", confirm: "Bekræft",
last_modified: "Sidst ændret", last_modified: "Sidst ændret",
drag_and_drop_files: "Træk og drop filen her eller klik for at uploade.", drag_and_drop_files: "Træk og drop filen her eller klik for at uploade.",
support_json_and_ddb: "JSON og DDB filer er understøttet",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"Upload en sql fil for at auto-generere dine tabeller og kolonner.", "Upload en sql fil for at auto-generere dine tabeller og kolonner.",
overwrite_existing_diagram: "Overskriv eksisterende diagram", overwrite_existing_diagram: "Overskriv eksisterende diagram",

View File

@ -7,6 +7,7 @@ const german = {
const de = { const de = {
translation: { translation: {
report_bug: "Einen Fehler melden", report_bug: "Einen Fehler melden",
import_from: "Importieren",
import: "Importieren", import: "Importieren",
file: "Datei", file: "Datei",
new: "Neu", new: "Neu",
@ -153,7 +154,6 @@ const de = {
confirm: "Bestätigen", confirm: "Bestätigen",
last_modified: "Zuletzt geändert", last_modified: "Zuletzt geändert",
drag_and_drop_files: "Ziehen Sie die Datei hierher oder klicken Sie, um sie hochzuladen.", drag_and_drop_files: "Ziehen Sie die Datei hierher oder klicken Sie, um sie hochzuladen.",
support_json_and_ddb: "JSON- und DDB-Dateien werden unterstützt",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"Laden Sie eine SQL-Datei hoch, um Ihre Tabellen und Spalten automatisch zu generieren.", "Laden Sie eine SQL-Datei hoch, um Ihre Tabellen und Spalten automatisch zu generieren.",
overwrite_existing_diagram: "Vorhandenes Diagramm überschreiben", overwrite_existing_diagram: "Vorhandenes Diagramm überschreiben",

View File

@ -8,6 +8,7 @@ const en = {
translation: { translation: {
report_bug: "Report a bug", report_bug: "Report a bug",
import: "Import", import: "Import",
import_from: "Import from",
file: "File", file: "File",
new: "New", new: "New",
new_window: "New window", new_window: "New window",
@ -157,7 +158,6 @@ const en = {
confirm: "Confirm", confirm: "Confirm",
last_modified: "Last modified", last_modified: "Last modified",
drag_and_drop_files: "Drag and drop the file here or click to upload.", drag_and_drop_files: "Drag and drop the file here or click to upload.",
support_json_and_ddb: "JSON and DDB files are supported",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"Upload an sql file to autogenerate your tables and columns.", "Upload an sql file to autogenerate your tables and columns.",
overwrite_existing_diagram: "Overwrite existing diagram", overwrite_existing_diagram: "Overwrite existing diagram",
@ -245,6 +245,7 @@ const en = {
"* Sharing this link will not create a live real-time collaboration session.", "* Sharing this link will not create a live real-time collaboration session.",
show_relationship_labels: "Show relationship labels", show_relationship_labels: "Show relationship labels",
docs: "Docs", docs: "Docs",
supported_types: "Supported file types:",
}, },
}; };

View File

@ -7,8 +7,9 @@ const spanish = {
const es = { const es = {
translation: { translation: {
report_bug: "Reportar Error", report_bug: "Reportar Error",
import_from: "Importar",
import: "Importar", import: "Importar",
file: "Archivo ", file: "Archivo",
new: "Nuevo", new: "Nuevo",
new_window: "Nueva Ventana", new_window: "Nueva Ventana",
open: "Abrir", open: "Abrir",
@ -138,7 +139,8 @@ const es = {
note_deleted: "Nota eliminada", note_deleted: "Nota eliminada",
relationship_deleted: "Relación eliminada", relationship_deleted: "Relación eliminada",
type_deleted: "Tipo eliminado", type_deleted: "Tipo eliminado",
cannot_connect: "No se puede conectar, las columnas tienen diferentes tipos", cannot_connect:
"No se puede conectar, las columnas tienen diferentes tipos",
copied_to_clipboard: "Copiado al portapapeles", copied_to_clipboard: "Copiado al portapapeles",
create_new_diagram: "Crear nuevo diagrama", create_new_diagram: "Crear nuevo diagrama",
cancel: "Cancelar", cancel: "Cancelar",
@ -149,8 +151,8 @@ const es = {
create: "Crear", create: "Crear",
confirm: "Confirmar", confirm: "Confirmar",
last_modified: "Última modificación", last_modified: "Última modificación",
drag_and_drop_files: "Arrastra y suelta el archivo aquí o haz clic para subir.", drag_and_drop_files:
support_json_and_ddb: "Se admiten archivos JSON y DDB", "Arrastra y suelta el archivo aquí o haz clic para subir.",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"Sube un archivo sql para autogenerar tus tablas y columnas.", "Sube un archivo sql para autogenerar tus tablas y columnas.",
overwrite_existing_diagram: "Sobrescribir diagrama existente", overwrite_existing_diagram: "Sobrescribir diagrama existente",
@ -184,7 +186,8 @@ const es = {
duplicate_type_fields: duplicate_type_fields:
"Campos de tipo duplicados por nombre '{{fieldName}}' en el tipo '{{typeName}}'", "Campos de tipo duplicados por nombre '{{fieldName}}' en el tipo '{{typeName}}'",
duplicate_reference: "Referencia duplicada con el nombre '{{refName}}'", duplicate_reference: "Referencia duplicada con el nombre '{{refName}}'",
circular_dependency: "Dependencia circular involucrando la tabla '{{refName}}'", circular_dependency:
"Dependencia circular involucrando la tabla '{{refName}}'",
timeline: "Linea del tiempo", timeline: "Linea del tiempo",
priority: "Prioridad", priority: "Prioridad",
none: "Ninguno", none: "Ninguno",

View File

@ -7,6 +7,7 @@ const persian = {
const fa = { const fa = {
translation: { translation: {
report_bug: "گزارش خطا", report_bug: "گزارش خطا",
import_from: "وارد کردن",
import: "وارد کردن", import: "وارد کردن",
file: "فایل", file: "فایل",
new: "جدید", new: "جدید",
@ -18,7 +19,8 @@ const fa = {
template_saved: "الگو ذخیره شد!", template_saved: "الگو ذخیره شد!",
rename: "تغییر نام", rename: "تغییر نام",
delete_diagram: "حذف نمودار", delete_diagram: "حذف نمودار",
are_you_sure_delete_diagram: "آیا مطمئن هستید که می‌خواهید این نمودار را حذف کنید؟ این عملیات غیر قابل برگشت است.", are_you_sure_delete_diagram:
"آیا مطمئن هستید که می‌خواهید این نمودار را حذف کنید؟ این عملیات غیر قابل برگشت است.",
oops_smth_went_wrong: "اوه! مشکلی پیش آمد.", oops_smth_went_wrong: "اوه! مشکلی پیش آمد.",
import_diagram: "وارد کردن نمودار", import_diagram: "وارد کردن نمودار",
import_from_source: "وارد کردن از SQL", import_from_source: "وارد کردن از SQL",
@ -30,7 +32,8 @@ const fa = {
undo: "واگرد", undo: "واگرد",
redo: "از نو", redo: "از نو",
clear: "پاک کردن", clear: "پاک کردن",
are_you_sure_clear: "آیا مطمئن هستید که می‌خواهید نمودار را پاک کنید؟ این عملیات غیر قابل برگشت است.", are_you_sure_clear:
"آیا مطمئن هستید که می‌خواهید نمودار را پاک کنید؟ این عملیات غیر قابل برگشت است.",
cut: "برش", cut: "برش",
copy: "کپی", copy: "کپی",
paste: "چسباندن", paste: "چسباندن",
@ -60,7 +63,8 @@ const fa = {
table_width: "عرض جدول", table_width: "عرض جدول",
language: "زبان", language: "زبان",
flush_storage: "پاک کردن حافظه", flush_storage: "پاک کردن حافظه",
are_you_sure_flush_storage: "آیا مطمئن هستید که می‌خواهید حافظه را پاک کنید؟ این عمل تمام نمودارها و الگوهای سفارشی شما را به طور غیر قابل برگشت حذف می‌کند.", are_you_sure_flush_storage:
"آیا مطمئن هستید که می‌خواهید حافظه را پاک کنید؟ این عمل تمام نمودارها و الگوهای سفارشی شما را به طور غیر قابل برگشت حذف می‌کند.",
storage_flushed: "حافظه پاک شد", storage_flushed: "حافظه پاک شد",
help: "راهنما", help: "راهنما",
shortcuts: "میانبرها", shortcuts: "میانبرها",
@ -89,13 +93,15 @@ const fa = {
no_relationships: "بدون رابطه", no_relationships: "بدون رابطه",
no_relationships_text: "برای اتصال فیلدها و تشکیل روابط بکشید!", no_relationships_text: "برای اتصال فیلدها و تشکیل روابط بکشید!",
no_subject_areas: "بدون ناحیه موضوعی", no_subject_areas: "بدون ناحیه موضوعی",
no_subject_areas_text: "ناحیه‌های موضوعی را برای گروه‌بندی جدول‌ها اضافه کنید!", no_subject_areas_text:
"ناحیه‌های موضوعی را برای گروه‌بندی جدول‌ها اضافه کنید!",
no_notes: "بدون یادداشت", no_notes: "بدون یادداشت",
no_notes_text: "از یادداشت‌ها برای ثبت اطلاعات اضافی استفاده کنید", no_notes_text: "از یادداشت‌ها برای ثبت اطلاعات اضافی استفاده کنید",
no_types: "بدون نوع", no_types: "بدون نوع",
no_types_text: "نوع داده سفارشی خود را بسازید", no_types_text: "نوع داده سفارشی خود را بسازید",
no_issues: "هیچ مشکلی شناسایی نشد.", no_issues: "هیچ مشکلی شناسایی نشد.",
strict_mode_is_on_no_issues: "حالت سختگیرانه خاموش است بنابراین هیچ مشکلی نمایش داده نخواهد شد.", strict_mode_is_on_no_issues:
"حالت سختگیرانه خاموش است بنابراین هیچ مشکلی نمایش داده نخواهد شد.",
name: "نام", name: "نام",
type: "نوع", type: "نوع",
null: "خالی", null: "خالی",
@ -105,7 +111,8 @@ const fa = {
autoincrement: "افزایش خودکار", autoincrement: "افزایش خودکار",
default_value: "پیش‌فرض", default_value: "پیش‌فرض",
check: "عبارت بررسی", check: "عبارت بررسی",
this_will_appear_as_is: "*این در اسکریپت تولید شده به همان صورت نمایش داده می‌شود.", this_will_appear_as_is:
"*این در اسکریپت تولید شده به همان صورت نمایش داده می‌شود.",
comment: "نظر", comment: "نظر",
add_field: "افزودن فیلد", add_field: "افزودن فیلد",
values: "مقادیر", values: "مقادیر",
@ -127,7 +134,8 @@ const fa = {
one_to_many: "یک به چند", one_to_many: "یک به چند",
many_to_one: "چند به یک", many_to_one: "چند به یک",
content: "محتوا", content: "محتوا",
types_info: "این ویژگی برای DBMSهای شیء‌گرا مانند PostgreSQL طراحی شده است.\nاگر برای MySQL یا MariaDB استفاده شود، نوع JSON با بررسی اعتبار json متناظر تولید می‌شود.\nاگر برای SQLite استفاده شود، به BLOB ترجمه می‌شود.\nاگر برای MSSQL استفاده شود، یک نام مستعار نوع برای فیلد اول تولید می‌شود.", types_info:
"این ویژگی برای DBMSهای شیء‌گرا مانند PostgreSQL طراحی شده است.\nاگر برای MySQL یا MariaDB استفاده شود، نوع JSON با بررسی اعتبار json متناظر تولید می‌شود.\nاگر برای SQLite استفاده شود، به BLOB ترجمه می‌شود.\nاگر برای MSSQL استفاده شود، یک نام مستعار نوع برای فیلد اول تولید می‌شود.",
table_deleted: "جدول حذف شد", table_deleted: "جدول حذف شد",
area_deleted: "ناحیه حذف شد", area_deleted: "ناحیه حذف شد",
note_deleted: "یادداشت حذف شد", note_deleted: "یادداشت حذف شد",
@ -144,22 +152,29 @@ const fa = {
create: "ایجاد", create: "ایجاد",
confirm: "تأیید", confirm: "تأیید",
last_modified: "آخرین ویرایش", last_modified: "آخرین ویرایش",
drag_and_drop_files: "فایل را اینجا بکشید و رها کنید یا کلیک کنید تا بارگذاری شود.", drag_and_drop_files:
support_json_and_ddb: "فایل‌های JSON و DDB پشتیبانی می‌شوند", "فایل را اینجا بکشید و رها کنید یا کلیک کنید تا بارگذاری شود.",
upload_sql_to_generate_diagrams: "یک فایل sql را بارگذاری کنید تا جداول و ستون‌هایتان به‌طور خودکار تولید شوند.", upload_sql_to_generate_diagrams:
"یک فایل sql را بارگذاری کنید تا جداول و ستون‌هایتان به‌طور خودکار تولید شوند.",
overwrite_existing_diagram: "بازنویسی نمودار موجود", overwrite_existing_diagram: "بازنویسی نمودار موجود",
only_mysql_supported: "*در حال حاضر فقط بارگذاری اسکریپت‌های MySQL پشتیبانی می‌شود.", only_mysql_supported:
"*در حال حاضر فقط بارگذاری اسکریپت‌های MySQL پشتیبانی می‌شود.",
blank: "خالی", blank: "خالی",
filename: "نام فایل", filename: "نام فایل",
table_w_no_name: "جدولی بدون نام اعلام شد", table_w_no_name: "جدولی بدون نام اعلام شد",
duplicate_table_by_name: "جدول تکراری با نام '{{tableName}}'", duplicate_table_by_name: "جدول تکراری با نام '{{tableName}}'",
empty_field_name: "فیلد خالی name در جدول '{{tableName}}'", empty_field_name: "فیلد خالی name در جدول '{{tableName}}'",
empty_field_type: "فیلد خالی type در جدول '{{tableName}}'", empty_field_type: "فیلد خالی type در جدول '{{tableName}}'",
no_values_for_field: "فیلد '{{fieldName}}' جدول '{{tableName}}' از نوع {{type}} است اما هیچ مقداری مشخص نشده است", no_values_for_field:
default_doesnt_match_type: "مقدار پیش‌فرض برای فیلد '{{fieldName}}' در جدول '{{tableName}}' با نوع آن مطابقت ندارد", "فیلد '{{fieldName}}' جدول '{{tableName}}' از نوع {{type}} است اما هیچ مقداری مشخص نشده است",
not_null_is_null: "فیلد '{{fieldName}}' جدول '{{tableName}}' غیر خالی است اما پیش‌فرض آن خالی است", default_doesnt_match_type:
duplicate_fields: "فیلدهای تکراری جدول به نام '{{fieldName}}' در جدول '{{tableName}}'", "مقدار پیش‌فرض برای فیلد '{{fieldName}}' در جدول '{{tableName}}' با نوع آن مطابقت ندارد",
duplicate_index: "شاخص تکراری به نام '{{indexName}}' در جدول '{{tableName}}'", not_null_is_null:
"فیلد '{{fieldName}}' جدول '{{tableName}}' غیر خالی است اما پیش‌فرض آن خالی است",
duplicate_fields:
"فیلدهای تکراری جدول به نام '{{fieldName}}' در جدول '{{tableName}}'",
duplicate_index:
"شاخص تکراری به نام '{{indexName}}' در جدول '{{tableName}}'",
empty_index: "شاخص در جدول '{{tableName}}' هیچ ستونی را شاخص نمی‌کند", empty_index: "شاخص در جدول '{{tableName}}' هیچ ستونی را شاخص نمی‌کند",
no_primary_key: "جدول '{{tableName}}' کلید اصلی ندارد", no_primary_key: "جدول '{{tableName}}' کلید اصلی ندارد",
type_with_no_name: "نوعی بدون نام اعلام شد", type_with_no_name: "نوعی بدون نام اعلام شد",
@ -167,8 +182,10 @@ const fa = {
type_w_no_fields: "نوع خالی '{{typeName}}' بدون فیلد اعلام شد", type_w_no_fields: "نوع خالی '{{typeName}}' بدون فیلد اعلام شد",
empty_type_field_name: "فیلد `name` خالی در نوع '{{typeName}}'", empty_type_field_name: "فیلد `name` خالی در نوع '{{typeName}}'",
empty_type_field_type: "فیلد `type` خالی در نوع '{{typeName}}'", empty_type_field_type: "فیلد `type` خالی در نوع '{{typeName}}'",
no_values_for_type_field: "'{{fieldName}}' فیلد از نوع '{{typeName}}' از نوع `{{type}}` است اما هیچ مقداری مشخص نشده است", no_values_for_type_field:
duplicate_type_fields: "فیلدهای تکراری نوع با نام '{{fieldName}}' در نوع '{{typeName}}'", "'{{fieldName}}' فیلد از نوع '{{typeName}}' از نوع `{{type}}` است اما هیچ مقداری مشخص نشده است",
duplicate_type_fields:
"فیلدهای تکراری نوع با نام '{{fieldName}}' در نوع '{{typeName}}'",
duplicate_reference: "ارجاع تکراری به نام '{{refName}}'", duplicate_reference: "ارجاع تکراری به نام '{{refName}}'",
circular_dependency: "وابستگی دورانی شامل جدول '{{refName}}'", circular_dependency: "وابستگی دورانی شامل جدول '{{refName}}'",
timeline: "جدول زمانی", timeline: "جدول زمانی",
@ -197,10 +214,8 @@ const fa = {
add_relationship: "اضافه کردن ارتباط", add_relationship: "اضافه کردن ارتباط",
edit_relationship: "{{extra}} ویرایش ارتباط {{refName}}", edit_relationship: "{{extra}} ویرایش ارتباط {{refName}}",
delete_relationship: "حذف ارتباط {{refName}}", delete_relationship: "حذف ارتباط {{refName}}",
not_found: "یافت نشد" not_found: "یافت نشد",
}, },
}; };
export { fa,persian };
export { fa, persian };

View File

@ -7,6 +7,7 @@ const french = {
const fr = { const fr = {
translation: { translation: {
report_bug: "Signaler un bug", report_bug: "Signaler un bug",
import_from: "Importer de",
import: "Importer", import: "Importer",
file: "Fichier", file: "Fichier",
new: "Nouveau", new: "Nouveau",
@ -155,7 +156,6 @@ const fr = {
last_modified: "Dernière modification", last_modified: "Dernière modification",
drag_and_drop_files: drag_and_drop_files:
"Glissez et déposez les fichiers ici ou cliquez pour les télécharger.", "Glissez et déposez les fichiers ici ou cliquez pour les télécharger.",
support_json_and_ddb: "Les fichiers JSON et DDB sont pris en charge",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"Téléchargez un fichier SQL pour générer automatiquement vos tables et colonnes.", "Téléchargez un fichier SQL pour générer automatiquement vos tables et colonnes.",
overwrite_existing_diagram: "Écraser le diagramme existant", overwrite_existing_diagram: "Écraser le diagramme existant",

View File

@ -7,6 +7,7 @@ const gujarati = {
const gu = { const gu = {
translation: { translation: {
report_bug: "બગ રિપોર્ટ કરો", report_bug: "બગ રિપોર્ટ કરો",
import_from: "આયાત",
import: "આયાત", import: "આયાત",
file: "ફાઇલ", file: "ફાઇલ",
new: "નવું", new: "નવું",
@ -149,8 +150,8 @@ const gu = {
create: "બનાવો", create: "બનાવો",
confirm: "પુષ્ટિ કરો", confirm: "પુષ્ટિ કરો",
last_modified: "છેલ્લે સુધારેલા", last_modified: "છેલ્લે સુધારેલા",
drag_and_drop_files: "ફાઇલને અહીં ખેંચો અને છોડો અથવા અપલોડ કરવા માટે ક્લિક કરો.", drag_and_drop_files:
support_json_and_ddb: "JSON અને DDB ફાઇલો સપોર્ટેડ છે", "ફાઇલને અહીં ખેંચો અને છોડો અથવા અપલોડ કરવા માટે ક્લિક કરો.",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"તમારી ટેબલ અને કોલમને આપમેળે જનરેટ કરવા માટે SQL ફાઇલ અપલોડ કરો.", "તમારી ટેબલ અને કોલમને આપમેળે જનરેટ કરવા માટે SQL ફાઇલ અપલોડ કરો.",
overwrite_existing_diagram: "મોજુદા ડાયાગ્રામને ઓવરરાઈટ કરો", overwrite_existing_diagram: "મોજુદા ડાયાગ્રામને ઓવરરાઈટ કરો",
@ -172,11 +173,13 @@ const gu = {
"ટેબલ '{{tableName}}' માં નામ '{{fieldName}}' વાળા ડુપ્લિકેટ ટેબલ ફીલ્ડ્સ", "ટેબલ '{{tableName}}' માં નામ '{{fieldName}}' વાળા ડુપ્લિકેટ ટેબલ ફીલ્ડ્સ",
duplicate_index: duplicate_index:
"ટેબલ '{{tableName}}' માં નામ '{{indexName}}' વાળો ડુપ્લિકેટ ઈન્ડેક્સ", "ટેબલ '{{tableName}}' માં નામ '{{indexName}}' વાળો ડુપ્લિકેટ ઈન્ડેક્સ",
empty_index: "ટેબલ '{{tableName}}' માં ઈન્ડેક્સ કોઈ કૉલમ ઈન્ડેક્સ કરતું નથી", empty_index:
"ટેબલ '{{tableName}}' માં ઈન્ડેક્સ કોઈ કૉલમ ઈન્ડેક્સ કરતું નથી",
no_primary_key: "ટેબલ '{{tableName}}' માં કોઈ પ્રાથમિક કી નથી", no_primary_key: "ટેબલ '{{tableName}}' માં કોઈ પ્રાથમિક કી નથી",
type_with_no_name: "કોઈ નામ ન હોય તેવા પ્રકારને ઘોષિત કર્યું", type_with_no_name: "કોઈ નામ ન હોય તેવા પ્રકારને ઘોષિત કર્યું",
duplicate_types: "નામ '{{typeName}}' વાળા ડુપ્લિકેટ પ્રકાર", duplicate_types: "નામ '{{typeName}}' વાળા ડુપ્લિકેટ પ્રકાર",
type_w_no_fields: "કોઈ ફીલ્ડ્સ ન હોય તેવા પ્રકાર '{{typeName}}' ને ઘોષિત કર્યું", type_w_no_fields:
"કોઈ ફીલ્ડ્સ ન હોય તેવા પ્રકાર '{{typeName}}' ને ઘોષિત કર્યું",
empty_type_field_name: "પ્રકાર '{{typeName}}' માં ખાલી ફીલ્ડ `નામ`", empty_type_field_name: "પ્રકાર '{{typeName}}' માં ખાલી ફીલ્ડ `નામ`",
empty_type_field_type: "પ્રકાર '{{typeName}}' માં ખાલી ફીલ્ડ `પ્રકાર`", empty_type_field_type: "પ્રકાર '{{typeName}}' માં ખાલી ફીલ્ડ `પ્રકાર`",
no_values_for_type_field: no_values_for_type_field:

View File

@ -7,6 +7,7 @@ const hebrew = {
const he = { const he = {
translation: { translation: {
report_bug: "דווח על באג", report_bug: "דווח על באג",
import_from: "ייבוא",
import: "ייבוא", import: "ייבוא",
file: "קובץ", file: "קובץ",
new: "חדש", new: "חדש",
@ -105,8 +106,7 @@ const he = {
no_types: "אין סוגים", no_types: "אין סוגים",
no_types_text: "צור סוגי נתונים מותאמים אישית", no_types_text: "צור סוגי נתונים מותאמים אישית",
no_issues: "לא נמצאו בעיות.", no_issues: "לא נמצאו בעיות.",
strict_mode_is_on_no_issues: strict_mode_is_on_no_issues: "מצב קפדני כבוי ולכן לא יוצגו בעיות.",
"מצב קפדני כבוי ולכן לא יוצגו בעיות.",
name: "שם", name: "שם",
type: "סוג", type: "סוג",
null: "ריק", null: "ריק",
@ -157,12 +157,10 @@ const he = {
confirm: "אשר", confirm: "אשר",
last_modified: "נערך לאחרונה", last_modified: "נערך לאחרונה",
drag_and_drop_files: "גרור ושחרר את הקובץ כאן או לחץ להעלאה.", drag_and_drop_files: "גרור ושחרר את הקובץ כאן או לחץ להעלאה.",
support_json_and_ddb: "תומך בקבצי JSON ו-DDB",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"העלה קובץ SQL כדי ליצור באופן אוטומטי את הטבלאות והעמודות שלך.", "העלה קובץ SQL כדי ליצור באופן אוטומטי את הטבלאות והעמודות שלך.",
overwrite_existing_diagram: "דרוס דיאגרמה קיימת", overwrite_existing_diagram: "דרוס דיאגרמה קיימת",
only_mysql_supported: only_mysql_supported: "*כרגע נתמך רק טעינת סקריפטים של MySQL.",
"*כרגע נתמך רק טעינת סקריפטים של MySQL.",
blank: "ריק", blank: "ריק",
filename: "שם קובץ", filename: "שם קובץ",
table_w_no_name: "הוכרז טבלה ללא שם", table_w_no_name: "הוכרז טבלה ללא שם",
@ -177,8 +175,7 @@ const he = {
"שדה '{{fieldName}}' בטבלה '{{tableName}}' אינו ריק אך ערך ברירת מחדל הוא NULL", "שדה '{{fieldName}}' בטבלה '{{tableName}}' אינו ריק אך ערך ברירת מחדל הוא NULL",
duplicate_fields: duplicate_fields:
"שדות טבלה כפולים בשם '{{fieldName}}' בטבלה '{{tableName}}'", "שדות טבלה כפולים בשם '{{fieldName}}' בטבלה '{{tableName}}'",
duplicate_index: duplicate_index: "אינדקס כפול בשם '{{indexName}}' בטבלה '{{tableName}}'",
"אינדקס כפול בשם '{{indexName}}' בטבלה '{{tableName}}'",
empty_index: "אינדקס בטבלה '{{tableName}}' אינו מאנדקס שום עמודות", empty_index: "אינדקס בטבלה '{{tableName}}' אינו מאנדקס שום עמודות",
no_primary_key: "לטבלה '{{tableName}}' אין מפתח ראשי", no_primary_key: "לטבלה '{{tableName}}' אין מפתח ראשי",
type_with_no_name: "הוכרז סוג ללא שם", type_with_no_name: "הוכרז סוג ללא שם",

View File

@ -2,11 +2,12 @@ const hindi = {
name: "Hindi", name: "Hindi",
native_name: "हिंदी", native_name: "हिंदी",
code: "hi", code: "hi",
}; };
const hi = { const hi = {
translation: { translation: {
report_bug: "बग रिपोर्ट करें", report_bug: "बग रिपोर्ट करें",
import_from: "इम्पोर्ट",
import: "इम्पोर्ट", import: "इम्पोर्ट",
file: "फ़ाइल", file: "फ़ाइल",
new: "नया", new: "नया",
@ -90,7 +91,8 @@ const hindi = {
no_tables: "कोई टेबल्स नहीं", no_tables: "कोई टेबल्स नहीं",
no_tables_text: "अपना डायग्राम बनाना शुरू करें!", no_tables_text: "अपना डायग्राम बनाना शुरू करें!",
no_relationships: "कोई संबंध नहीं", no_relationships: "कोई संबंध नहीं",
no_relationships_text: "फील्ड्स को कनेक्ट करने के लिए खींचें और संबंध बनाएं!", no_relationships_text:
"फील्ड्स को कनेक्ट करने के लिए खींचें और संबंध बनाएं!",
no_subject_areas: "कोई विषय एरियाज नहीं", no_subject_areas: "कोई विषय एरियाज नहीं",
no_subject_areas_text: "ग्रूप टेबल्स को सब्जेक्ट एरियाज जोड़ें!", no_subject_areas_text: "ग्रूप टेबल्स को सब्जेक्ट एरियाज जोड़ें!",
no_notes: "कोई नोट्स नहीं", no_notes: "कोई नोट्स नहीं",
@ -109,7 +111,8 @@ const hindi = {
autoincrement: "स्वतः वाढ", autoincrement: "स्वतः वाढ",
default_value: "डिफ़ॉल्ट", default_value: "डिफ़ॉल्ट",
check: "चेक एक्सप्रेशन", check: "चेक एक्सप्रेशन",
this_will_appear_as_is: "*यह जेनरेटेड स्क्रिप्ट में जैसा है वैसा ही दिखेगा।", this_will_appear_as_is:
"*यह जेनरेटेड स्क्रिप्ट में जैसा है वैसा ही दिखेगा।",
comment: "टिप्पणी", comment: "टिप्पणी",
add_field: "फ़ील्ड जोड़ें", add_field: "फ़ील्ड जोड़ें",
values: "व्हॅल्यूज", values: "व्हॅल्यूज",
@ -149,8 +152,8 @@ const hindi = {
create: "बनाएं", create: "बनाएं",
confirm: "पुष्टि करें", confirm: "पुष्टि करें",
last_modified: "अंतिम बार मॉडिफाइड", last_modified: "अंतिम बार मॉडिफाइड",
drag_and_drop_files: "फ़ाइल को यहां खींचें और छोड़ें या अपलोड करने के लिए क्लिक करें।", drag_and_drop_files:
support_json_and_ddb: "JSON और DDB फ़ाइलें समर्थित हैं", "फ़ाइल को यहां खींचें और छोड़ें या अपलोड करने के लिए क्लिक करें।",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"अपनी टेबल और कॉलम को स्वचालित रूप से जेनरेट करने के लिए एक sql फ़ाइल अपलोड करें।", "अपनी टेबल और कॉलम को स्वचालित रूप से जेनरेट करने के लिए एक sql फ़ाइल अपलोड करें।",
overwrite_existing_diagram: "मौजूदा डायग्राम को अधिलेखित करें", overwrite_existing_diagram: "मौजूदा डायग्राम को अधिलेखित करें",
@ -176,7 +179,8 @@ const hindi = {
no_primary_key: "टेबल '{{tableName}}' में कोई प्राथमिक कुंजी नहीं है", no_primary_key: "टेबल '{{tableName}}' में कोई प्राथमिक कुंजी नहीं है",
type_with_no_name: "कोई नाम नहीं होने वाले प्रकार को घोषित किया", type_with_no_name: "कोई नाम नहीं होने वाले प्रकार को घोषित किया",
duplicate_types: "नाम '{{typeName}}' वाले डुप्लिकेट प्रकार", duplicate_types: "नाम '{{typeName}}' वाले डुप्लिकेट प्रकार",
type_w_no_fields: "कोई फ़ील्ड्स नहीं होने वाले प्रकार '{{typeName}}' को घोषित किया", type_w_no_fields:
"कोई फ़ील्ड्स नहीं होने वाले प्रकार '{{typeName}}' को घोषित किया",
empty_type_field_name: "प्रकार '{{typeName}}' में खाली फ़ील्ड `नाम`", empty_type_field_name: "प्रकार '{{typeName}}' में खाली फ़ील्ड `नाम`",
empty_type_field_type: "प्रकार '{{typeName}}' में खाली फ़ील्ड `प्रकार`", empty_type_field_type: "प्रकार '{{typeName}}' में खाली फ़ील्ड `प्रकार`",
no_values_for_type_field: no_values_for_type_field:
@ -213,7 +217,6 @@ const hindi = {
delete_relationship: "संबंध हटाएं {{refName}}", delete_relationship: "संबंध हटाएं {{refName}}",
not_found: "नहीं मिला", not_found: "नहीं मिला",
}, },
}; };
export { hi, hindi };
export { hi, hindi };

View File

@ -8,6 +8,7 @@ const hu = {
translation: { translation: {
report_bug: "Hiba jelentése", report_bug: "Hiba jelentése",
import: "Importálás", import: "Importálás",
import_from: "Importálás innen",
file: "Fájl", file: "Fájl",
new: "Új", new: "Új",
new_window: "Új ablak", new_window: "Új ablak",
@ -97,9 +98,11 @@ const hu = {
no_tables: "Nincs tábla", no_tables: "Nincs tábla",
no_tables_text: "Vágjon bele diagramja elkészítésébe!", no_tables_text: "Vágjon bele diagramja elkészítésébe!",
no_relationships: "Nincs kapcsolat létrehozva", no_relationships: "Nincs kapcsolat létrehozva",
no_relationships_text: "Egérhúzással összeköthet mezőket kapcsolatok létrehozásához", no_relationships_text:
"Egérhúzással összeköthet mezőket kapcsolatok létrehozásához",
no_subject_areas: "Nincs terület hozzáadva", no_subject_areas: "Nincs terület hozzáadva",
no_subject_areas_text: "Adjon hozzá területeket a táblák csoportosításához!", no_subject_areas_text:
"Adjon hozzá területeket a táblák csoportosításához!",
no_notes: "Nincs jegyzet", no_notes: "Nincs jegyzet",
no_notes_text: "Használjon jegyzeteket további információk feljegyzéséhez", no_notes_text: "Használjon jegyzeteket további információk feljegyzéséhez",
no_types: "Nincs típus", no_types: "Nincs típus",
@ -116,7 +119,8 @@ const hu = {
autoincrement: "Automatikus növelés", autoincrement: "Automatikus növelés",
default_value: "Alapért.", default_value: "Alapért.",
check: "'Check' kifejezés", check: "'Check' kifejezés",
this_will_appear_as_is: "*Ez a generált parancsfájlban ugyanígy fog megjelenni.", this_will_appear_as_is:
"*Ez a generált parancsfájlban ugyanígy fog megjelenni.",
comment: "Megjegyzés", comment: "Megjegyzés",
add_field: "Új mező", add_field: "Új mező",
values: "Értékek", values: "Értékek",
@ -145,7 +149,8 @@ const hu = {
note_deleted: "A jegyzet törölve", note_deleted: "A jegyzet törölve",
relationship_deleted: "A kapcsolat törölve", relationship_deleted: "A kapcsolat törölve",
type_deleted: "A típus törölve", type_deleted: "A típus törölve",
cannot_connect: "A kapcsolatot nem lehet létrehozni, az oszlopok eltérő típusúak", cannot_connect:
"A kapcsolatot nem lehet létrehozni, az oszlopok eltérő típusúak",
copied_to_clipboard: "Másolva a vágólapra", copied_to_clipboard: "Másolva a vágólapra",
create_new_diagram: "Új diagram létrehozása", create_new_diagram: "Új diagram létrehozása",
cancel: "Mégse", cancel: "Mégse",
@ -156,19 +161,21 @@ const hu = {
create: "Létrehozás", create: "Létrehozás",
confirm: "Megerősítés", confirm: "Megerősítés",
last_modified: "Utoljára módosítva", last_modified: "Utoljára módosítva",
drag_and_drop_files: "Húzzon ide egy fájlt vagy kattintson a feltöltendő fájl kiválasztásához.", drag_and_drop_files:
support_json_and_ddb: "JSON és DDB fájlok támogatottak", "Húzzon ide egy fájlt vagy kattintson a feltöltendő fájl kiválasztásához.",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"Töltsön fel egy sql fájlt a táblák és oszlopok automatikus generálásához.", "Töltsön fel egy sql fájlt a táblák és oszlopok automatikus generálásához.",
overwrite_existing_diagram: "Meglévő diagram felülírása", overwrite_existing_diagram: "Meglévő diagram felülírása",
only_mysql_supported: only_mysql_supported: "*Jelenleg csak MySQL fájlok betöltése támogatott.",
"*Jelenleg csak MySQL fájlok betöltése támogatott.",
blank: "Üres", blank: "Üres",
filename: "Fájlnév", filename: "Fájlnév",
table_w_no_name: "Nincs megadva név egy táblának", table_w_no_name: "Nincs megadva név egy táblának",
duplicate_table_by_name: "Több tábla is létezik ezzel a névvel: '{{tableName}}'", duplicate_table_by_name:
empty_field_name: "Nincs megadva egy mező `neve` a(z) '{{tableName}}' táblában", "Több tábla is létezik ezzel a névvel: '{{tableName}}'",
empty_field_type: "Nincs megadva egy mező `típusa` a(z) '{{tableName}}' táblában", empty_field_name:
"Nincs megadva egy mező `neve` a(z) '{{tableName}}' táblában",
empty_field_type:
"Nincs megadva egy mező `típusa` a(z) '{{tableName}}' táblában",
no_values_for_field: no_values_for_field:
"A(z) '{{tableName}}' tábla '{{fieldName}}' mezője `{{type}}` típusú, de nincs megadva érték", "A(z) '{{tableName}}' tábla '{{fieldName}}' mezője `{{type}}` típusú, de nincs megadva érték",
default_doesnt_match_type: default_doesnt_match_type:
@ -179,8 +186,10 @@ const hu = {
"Több '{{fieldName}}' nevű mező is létezik a(z) '{{tableName}}' táblában", "Több '{{fieldName}}' nevű mező is létezik a(z) '{{tableName}}' táblában",
duplicate_index: duplicate_index:
"Több '{{indexName}}' nevű index is létezik a(z) '{{tableName}}' táblában", "Több '{{indexName}}' nevű index is létezik a(z) '{{tableName}}' táblában",
empty_index: "A(z) '{{tableName}}' táblában levő index egyetlen oszlopot sem indexel", empty_index:
no_primary_key: "A(z) '{{tableName}}' tábla nem rendelkezik elsődleges kulccsal", "A(z) '{{tableName}}' táblában levő index egyetlen oszlopot sem indexel",
no_primary_key:
"A(z) '{{tableName}}' tábla nem rendelkezik elsődleges kulccsal",
type_with_no_name: "Nincs megadva egy egyedi típus neve", type_with_no_name: "Nincs megadva egy egyedi típus neve",
duplicate_types: "Több típus is létezik a(z) '{{typeName}}' névvel", duplicate_types: "Több típus is létezik a(z) '{{typeName}}' névvel",
type_w_no_fields: "Nincs megadva mező a(z) '{{typeName}}' típusnak", type_w_no_fields: "Nincs megadva mező a(z) '{{typeName}}' típusnak",
@ -191,7 +200,8 @@ const hu = {
duplicate_type_fields: duplicate_type_fields:
"Több '{{fieldName}}' nevű mező is létezik a(z) '{{typeName}}' típussal", "Több '{{fieldName}}' nevű mező is létezik a(z) '{{typeName}}' típussal",
duplicate_reference: "Több hivatkozás is létezik a(z) '{{refName}}' névvel", duplicate_reference: "Több hivatkozás is létezik a(z) '{{refName}}' névvel",
circular_dependency: "Körkörös hivatkozás a(z) '{{refName}}' táblával kapcsolatban", circular_dependency:
"Körkörös hivatkozás a(z) '{{refName}}' táblával kapcsolatban",
timeline: "Előzmények", timeline: "Előzmények",
priority: "Prioritás", priority: "Prioritás",
none: "Nincs", none: "Nincs",
@ -233,16 +243,21 @@ const hu = {
no_enums: "Nincs enum", no_enums: "Nincs enum",
no_enums_text: "Itt adhat meg enum-okat", no_enums_text: "Itt adhat meg enum-okat",
declare_array: "Tömb megadása", declare_array: "Tömb megadása",
empty_index_name: "A(z) '{{tableName}}' táblában egy indexnek nincs megadva név", empty_index_name:
"A(z) '{{tableName}}' táblában egy indexnek nincs megadva név",
didnt_find_diagram: "Hoppá! A diagram nem található.", didnt_find_diagram: "Hoppá! A diagram nem található.",
unsigned: "Előjel nélküli", unsigned: "Előjel nélküli",
share: "Megosztás", share: "Megosztás",
unshare: "Megosztás megszüntetése", unshare: "Megosztás megszüntetése",
copy_link: "Hivatkozás másolása", copy_link: "Hivatkozás másolása",
readme: "OLVASS_EL", readme: "OLVASS_EL",
failed_to_load: "A betöltés sikertelen. Ellenőrizze a hivatkozás helyességét!", failed_to_load:
"A betöltés sikertelen. Ellenőrizze a hivatkozás helyességét!",
share_info: share_info:
"* Ezen hivatkozás megosztása nem fog létrehozni élő, valósidejű együttműködési munkamenetet.", "* Ezen hivatkozás megosztása nem fog létrehozni élő, valósidejű együttműködési munkamenetet.",
show_relationship_labels: "Kapcsolatcímkék",
docs: "Dokumentáció",
supported_types: "Támogatott fájltípusok:",
}, },
}; };

View File

@ -7,6 +7,7 @@ const armenian = {
const hy = { const hy = {
translation: { translation: {
report_bug: "Զեկուցել սխալի մասին", report_bug: "Զեկուցել սխալի մասին",
import_from: "Ներմուծել",
import: "Ներմուծել", import: "Ներմուծել",
file: "Ֆայլ", file: "Ֆայլ",
new: "Նոր", new: "Նոր",
@ -161,7 +162,6 @@ const hy = {
last_modified: "Վերջին փոփոխությունը", last_modified: "Վերջին փոփոխությունը",
drag_and_drop_files: drag_and_drop_files:
"Քաշեք և թողեք ֆայլը այստեղ կամ սեղմեք բեռնելու համար։", "Քաշեք և թողեք ֆայլը այստեղ կամ սեղմեք բեռնելու համար։",
support_json_and_ddb: "Աջակցվում են JSON և DDB ֆայլեր",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"Վերբեռնեք sql ֆայլ՝ ձեր աղյուսակներն ու սյունակները ավտոմատ ստեղծելու համար։", "Վերբեռնեք sql ֆայլ՝ ձեր աղյուսակներն ու սյունակները ավտոմատ ստեղծելու համար։",
overwrite_existing_diagram: "Փոխարինել առկա սխեման", overwrite_existing_diagram: "Փոխարինել առկա սխեման",

View File

@ -7,6 +7,7 @@ const indonesian = {
const id = { const id = {
translation: { translation: {
report_bug: "Laporkan bug", report_bug: "Laporkan bug",
import_from: "Impor",
import: "Impor", import: "Impor",
file: "Berkas", file: "Berkas",
new: "Baru", new: "Baru",
@ -31,7 +32,8 @@ const id = {
undo: "Batalkan", undo: "Batalkan",
redo: "Ulangi", redo: "Ulangi",
clear: "Bersihkan", clear: "Bersihkan",
are_you_sure_clear: "Apakah Anda yakin ingin membersihkan diagram ini? Ini tidak bisa dibatalkan.", are_you_sure_clear:
"Apakah Anda yakin ingin membersihkan diagram ini? Ini tidak bisa dibatalkan.",
cut: "Potong", cut: "Potong",
copy: "Salin", copy: "Salin",
paste: "Tempel", paste: "Tempel",
@ -96,7 +98,8 @@ const id = {
no_tables: "Tidak ada tabel", no_tables: "Tidak ada tabel",
no_tables_text: "Mulai bangun diagram Anda!", no_tables_text: "Mulai bangun diagram Anda!",
no_relationships: "Tidak ada hubungan", no_relationships: "Tidak ada hubungan",
no_relationships_text: "Seret untuk menghubungkan bidang dan membentuk hubungan!", no_relationships_text:
"Seret untuk menghubungkan bidang dan membentuk hubungan!",
no_subject_areas: "Tidak ada area subjek", no_subject_areas: "Tidak ada area subjek",
no_subject_areas_text: "Tambahkan area subjek untuk mengelompokkan tabel!", no_subject_areas_text: "Tambahkan area subjek untuk mengelompokkan tabel!",
no_notes: "Tidak ada catatan", no_notes: "Tidak ada catatan",
@ -104,7 +107,8 @@ const id = {
no_types: "Tidak ada tipe", no_types: "Tidak ada tipe",
no_types_text: "Buat tipe data kustom Anda sendiri", no_types_text: "Buat tipe data kustom Anda sendiri",
no_issues: "Tidak ada masalah yang terdeteksi.", no_issues: "Tidak ada masalah yang terdeteksi.",
strict_mode_is_on_no_issues: "Mode ketat dimatikan sehingga tidak ada masalah yang akan ditampilkan.", strict_mode_is_on_no_issues:
"Mode ketat dimatikan sehingga tidak ada masalah yang akan ditampilkan.",
name: "Nama", name: "Nama",
type: "Jenis", type: "Jenis",
null: "Kosong", null: "Kosong",
@ -114,7 +118,8 @@ const id = {
autoincrement: "Autoincrement", autoincrement: "Autoincrement",
default_value: "Nilai default", default_value: "Nilai default",
check: "Periksa ekspresi", check: "Periksa ekspresi",
this_will_appear_as_is: "*Ini akan muncul dalam skrip yang dihasilkan sebagaimana adanya.", this_will_appear_as_is:
"*Ini akan muncul dalam skrip yang dihasilkan sebagaimana adanya.",
comment: "Komentar", comment: "Komentar",
add_field: "Tambah bidang", add_field: "Tambah bidang",
values: "Nilai", values: "Nilai",
@ -143,7 +148,8 @@ const id = {
note_deleted: "Catatan dihapus", note_deleted: "Catatan dihapus",
relationship_deleted: "Hubungan dihapus", relationship_deleted: "Hubungan dihapus",
type_deleted: "Jenis dihapus", type_deleted: "Jenis dihapus",
cannot_connect: "Tidak dapat menghubungkan, kolom memiliki tipe yang berbeda", cannot_connect:
"Tidak dapat menghubungkan, kolom memiliki tipe yang berbeda",
copied_to_clipboard: "Disalin ke papan klip", copied_to_clipboard: "Disalin ke papan klip",
create_new_diagram: "Buat diagram baru", create_new_diagram: "Buat diagram baru",
cancel: "Batal", cancel: "Batal",
@ -154,9 +160,10 @@ const id = {
create: "Buat", create: "Buat",
confirm: "Konfirmasi", confirm: "Konfirmasi",
last_modified: "Terakhir diubah", last_modified: "Terakhir diubah",
drag_and_drop_files: "Seret dan lepas file di sini atau klik untuk mengunggah.", drag_and_drop_files:
support_json_and_ddb: "File JSON dan DDB didukung", "Seret dan lepas file di sini atau klik untuk mengunggah.",
upload_sql_to_generate_diagrams: "Unggah file SQL untuk mengotomatiskan tabel dan kolom Anda.", upload_sql_to_generate_diagrams:
"Unggah file SQL untuk mengotomatiskan tabel dan kolom Anda.",
overwrite_existing_diagram: "Timpa diagram yang ada", overwrite_existing_diagram: "Timpa diagram yang ada",
only_mysql_supported: "*Saat ini hanya memuat skrip MySQL yang didukung.", only_mysql_supported: "*Saat ini hanya memuat skrip MySQL yang didukung.",
blank: "Kosong", blank: "Kosong",
@ -171,20 +178,27 @@ const id = {
"Nilai default untuk bidang '{{fieldName}}' dalam tabel '{{tableName}}' tidak sesuai dengan tipenya", "Nilai default untuk bidang '{{fieldName}}' dalam tabel '{{tableName}}' tidak sesuai dengan tipenya",
not_null_is_null: not_null_is_null:
"Bidang '{{fieldName}}' dalam tabel '{{tableName}}' adalah TIDAK NULL tetapi memiliki nilai default NULL", "Bidang '{{fieldName}}' dalam tabel '{{tableName}}' adalah TIDAK NULL tetapi memiliki nilai default NULL",
duplicate_fields: "Bidang tabel duplikat dengan nama '{{fieldName}}' dalam tabel '{{tableName}}'", duplicate_fields:
duplicate_index: "Indeks duplikat dengan nama '{{indexName}}' dalam tabel '{{tableName}}'", "Bidang tabel duplikat dengan nama '{{fieldName}}' dalam tabel '{{tableName}}'",
empty_index: "Indeks dalam tabel '{{tableName}}' tidak mengindeks kolom apapun", duplicate_index:
"Indeks duplikat dengan nama '{{indexName}}' dalam tabel '{{tableName}}'",
empty_index:
"Indeks dalam tabel '{{tableName}}' tidak mengindeks kolom apapun",
no_primary_key: "Tabel '{{tableName}}' tidak memiliki kunci utama", no_primary_key: "Tabel '{{tableName}}' tidak memiliki kunci utama",
type_with_no_name: "Mendeklarasikan tipe tanpa nama", type_with_no_name: "Mendeklarasikan tipe tanpa nama",
duplicate_types: "Tipe duplikat dengan nama '{{typeName}}'", duplicate_types: "Tipe duplikat dengan nama '{{typeName}}'",
type_w_no_fields: "Mendeklarasikan tipe '{{typeName}}' kosong tanpa bidang", type_w_no_fields: "Mendeklarasikan tipe '{{typeName}}' kosong tanpa bidang",
empty_type_field_name: "Nama bidang `name` kosong dalam tipe '{{typeName}}'", empty_type_field_name:
empty_type_field_type: "Jenis bidang `type` kosong dalam tipe '{{typeName}}'", "Nama bidang `name` kosong dalam tipe '{{typeName}}'",
empty_type_field_type:
"Jenis bidang `type` kosong dalam tipe '{{typeName}}'",
no_values_for_type_field: no_values_for_type_field:
"Bidang '{{fieldName}}' dalam tipe '{{typeName}}' adalah tipe `{{type}}` tetapi tidak ada nilai yang ditentukan", "Bidang '{{fieldName}}' dalam tipe '{{typeName}}' adalah tipe `{{type}}` tetapi tidak ada nilai yang ditentukan",
duplicate_type_fields: "Bidang tipe duplikat dengan nama '{{fieldName}}' dalam tipe '{{typeName}}'", duplicate_type_fields:
"Bidang tipe duplikat dengan nama '{{fieldName}}' dalam tipe '{{typeName}}'",
duplicate_reference: "Referensi duplikat dengan nama '{{refName}}'", duplicate_reference: "Referensi duplikat dengan nama '{{refName}}'",
circular_dependency: "Ketergantungan siklik yang melibatkan tabel '{{refName}}'", circular_dependency:
"Ketergantungan siklik yang melibatkan tabel '{{refName}}'",
timeline: "Garis waktu", timeline: "Garis waktu",
priority: "Prioritas", priority: "Prioritas",
none: "Tidak ada", none: "Tidak ada",
@ -214,7 +228,8 @@ const id = {
not_found: "Tidak ditemukan", not_found: "Tidak ditemukan",
pick_db: "Pilih basis data", pick_db: "Pilih basis data",
generic: "Generik", generic: "Generik",
generic_description: "Diagram generik dapat diekspor ke SQL mana pun tetapi mendukung sedikit tipe data.", generic_description:
"Diagram generik dapat diekspor ke SQL mana pun tetapi mendukung sedikit tipe data.",
enums: "Enums", enums: "Enums",
add_enum: "Tambah enum", add_enum: "Tambah enum",
edit_enum: "{{extra}} Edit enum {{enumName}}", edit_enum: "{{extra}} Edit enum {{enumName}}",
@ -225,7 +240,8 @@ const id = {
no_enums: "Tidak ada enum", no_enums: "Tidak ada enum",
no_enums_text: "Definisikan enum di sini", no_enums_text: "Definisikan enum di sini",
declare_array: "Deklarasikan array", declare_array: "Deklarasikan array",
empty_index_name: "Mendeklarasikan indeks tanpa nama dalam tabel '{{tableName}}'", empty_index_name:
"Mendeklarasikan indeks tanpa nama dalam tabel '{{tableName}}'",
didnt_find_diagram: "Ups! Tidak menemukan diagram.", didnt_find_diagram: "Ups! Tidak menemukan diagram.",
}, },
}; };

View File

@ -7,8 +7,9 @@ const italian = {
const it = { const it = {
translation: { translation: {
report_bug: "Segnalare un bug", report_bug: "Segnalare un bug",
import_from: "Importa",
import: "Importa", import: "Importa",
file: "File ", file: "File",
new: "Nuovo", new: "Nuovo",
new_window: "Nuova Finestra", new_window: "Nuova Finestra",
open: "Apri", open: "Apri",
@ -156,8 +157,8 @@ const it = {
create: "Crea", create: "Crea",
confirm: "Accetta", confirm: "Accetta",
last_modified: "Ultima modifica", last_modified: "Ultima modifica",
drag_and_drop_files: "Trascina e rilascia qui il file o clicca per caricarlo.", drag_and_drop_files:
support_json_and_ddb: "I file JSON e DDB sono supportati", "Trascina e rilascia qui il file o clicca per caricarlo.",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"Carica un file sql per autogenerare le tabelle e le colonne.", "Carica un file sql per autogenerare le tabelle e le colonne.",
overwrite_existing_diagram: "Sovrascrivi il diagramma esistente", overwrite_existing_diagram: "Sovrascrivi il diagramma esistente",
@ -179,11 +180,13 @@ const it = {
"Campi della tabella duplicati con il nome '{{fieldName}}' nella tabella '{{tableName}}'", "Campi della tabella duplicati con il nome '{{fieldName}}' nella tabella '{{tableName}}'",
duplicate_index: duplicate_index:
"Indice duplicato con il nome '{{indexName}}' nella tabella '{{tableName}}'", "Indice duplicato con il nome '{{indexName}}' nella tabella '{{tableName}}'",
empty_index: "L'indice nella tabella '{{tableName}}' non indicizza nessuna colonna", empty_index:
"L'indice nella tabella '{{tableName}}' non indicizza nessuna colonna",
no_primary_key: "La tabella '{{tableName}}' non ha una chiave primaria", no_primary_key: "La tabella '{{tableName}}' non ha una chiave primaria",
type_with_no_name: "Dichiarato un tipo senza nome", type_with_no_name: "Dichiarato un tipo senza nome",
duplicate_types: "Tipi duplicati con il nome '{{typeName}}'", duplicate_types: "Tipi duplicati con il nome '{{typeName}}'",
type_w_no_fields: "Dichiarato un tipo vuoto '{{typeName}}' senza alcun campo", type_w_no_fields:
"Dichiarato un tipo vuoto '{{typeName}}' senza alcun campo",
empty_type_field_name: "Campo `name` vuoto nel tipo '{{typeName}}'", empty_type_field_name: "Campo `name` vuoto nel tipo '{{typeName}}'",
empty_type_field_type: "Campo `type` vuoto nel tipo '{{typeName}}'", empty_type_field_type: "Campo `type` vuoto nel tipo '{{typeName}}'",
no_values_for_type_field: no_values_for_type_field:
@ -191,7 +194,8 @@ const it = {
duplicate_type_fields: duplicate_type_fields:
"Campi di tipo duplicati con il nome '{{fieldName}}' nel tipo '{{typeName}}'", "Campi di tipo duplicati con il nome '{{fieldName}}' nel tipo '{{typeName}}'",
duplicate_reference: "Riferimento duplicato con il nome '{{refName}}'", duplicate_reference: "Riferimento duplicato con il nome '{{refName}}'",
circular_dependency: "Dipendenza circolare riguardante la tabella '{{refName}}'", circular_dependency:
"Dipendenza circolare riguardante la tabella '{{refName}}'",
timeline: "Cronologia", timeline: "Cronologia",
priority: "Priorità", priority: "Priorità",
none: "Nessuna", none: "Nessuna",
@ -233,7 +237,8 @@ const it = {
no_enums: "Nessun enum", no_enums: "Nessun enum",
no_enums_text: "Definisci qui gli enum", no_enums_text: "Definisci qui gli enum",
declare_array: "Dichiara array", declare_array: "Dichiara array",
empty_index_name: "Dichiarato un indice senza nome nella tabella '{{tableName}}'", empty_index_name:
"Dichiarato un indice senza nome nella tabella '{{tableName}}'",
didnt_find_diagram: "Ops! Impossibile trovare il diagramma.", didnt_find_diagram: "Ops! Impossibile trovare il diagramma.",
unsigned: "Senza segno", unsigned: "Senza segno",
}, },

View File

@ -2,11 +2,12 @@ const japanese = {
name: "Japanese", name: "Japanese",
native_name: "Japanese", native_name: "Japanese",
code: "jp", code: "jp",
}; };
const jp = { const jp = {
translation: { translation: {
report_bug: "バグを報告", report_bug: "バグを報告",
import_from: "インポート",
import: "インポート", import: "インポート",
file: "ファイル", file: "ファイル",
new: "新規", new: "新規",
@ -18,7 +19,8 @@ const japanese = {
template_saved: "テンプレートが保存されました!", template_saved: "テンプレートが保存されました!",
rename: "名前を変更", rename: "名前を変更",
delete_diagram: "ダイアグラムを削除", delete_diagram: "ダイアグラムを削除",
are_you_sure_delete_diagram: "このダイアグラムを削除してもよろしいですか? この操作は取り消せません。", are_you_sure_delete_diagram:
"このダイアグラムを削除してもよろしいですか? この操作は取り消せません。",
oops_smth_went_wrong: "おっと!何かがうまくいかなかった。", oops_smth_went_wrong: "おっと!何かがうまくいかなかった。",
import_diagram: "ダイアグラムをインポート", import_diagram: "ダイアグラムをインポート",
import_from_source: "SQLからインポート", import_from_source: "SQLからインポート",
@ -30,7 +32,8 @@ const japanese = {
undo: "元に戻す", undo: "元に戻す",
redo: "やり直す", redo: "やり直す",
clear: "クリア", clear: "クリア",
are_you_sure_clear: "ダイアグラムをクリアしてもよろしいですか? この操作は取り消せません。", are_you_sure_clear:
"ダイアグラムをクリアしてもよろしいですか? この操作は取り消せません。",
cut: "切り取り", cut: "切り取り",
copy: "コピー", copy: "コピー",
paste: "貼り付け", paste: "貼り付け",
@ -67,7 +70,8 @@ const japanese = {
table_width: "テーブル幅", table_width: "テーブル幅",
language: "言語", language: "言語",
flush_storage: "ストレージを消去", flush_storage: "ストレージを消去",
are_you_sure_flush_storage: "ストレージを消去してもよろしいですか? これにより、すべてのダイアグラムとカスタムテンプレートが取り消し不能に削除されます。", are_you_sure_flush_storage:
"ストレージを消去してもよろしいですか? これにより、すべてのダイアグラムとカスタムテンプレートが取り消し不能に削除されます。",
storage_flushed: "ストレージが消去されました", storage_flushed: "ストレージが消去されました",
help: "ヘルプ", help: "ヘルプ",
shortcuts: "ショートカット", shortcuts: "ショートカット",
@ -102,7 +106,8 @@ const japanese = {
no_types: "タイプがありません", no_types: "タイプがありません",
no_types_text: "カスタムデータタイプを作成", no_types_text: "カスタムデータタイプを作成",
no_issues: "問題は検出されていません。", no_issues: "問題は検出されていません。",
strict_mode_is_on_no_issues: "厳格モードがオフになっているため、問題は表示されません。", strict_mode_is_on_no_issues:
"厳格モードがオフになっているため、問題は表示されません。",
name: "名前", name: "名前",
type: "タイプ", type: "タイプ",
null: "Null", null: "Null",
@ -112,7 +117,8 @@ const japanese = {
autoincrement: "オートインクリメント", autoincrement: "オートインクリメント",
default_value: "デフォルト", default_value: "デフォルト",
check: "チェック式", check: "チェック式",
this_will_appear_as_is: "*これが生成されたスクリプトにそのまま表示されます。", this_will_appear_as_is:
"*これが生成されたスクリプトにそのまま表示されます。",
comment: "コメント", comment: "コメント",
add_field: "フィールドを追加", add_field: "フィールドを追加",
values: "値", values: "値",
@ -134,7 +140,8 @@ const japanese = {
one_to_many: "1対多", one_to_many: "1対多",
many_to_one: "多対1", many_to_one: "多対1",
content: "内容", content: "内容",
types_info: "この機能はPostgreSQLのようなオブジェクトリレーショナルDBMS向けです。\nMySQLやMariaDBで使用した場合、対応するjsonの検証チェックと共にJSONタイプが生成されます。\nSQLiteで使用した場合、BLOBに変換されます。\nMSSQLで使用した場合、最初のフィールドへのタイプエイリアスが生成されます。", types_info:
"この機能はPostgreSQLのようなオブジェクトリレーショナルDBMS向けです。\nMySQLやMariaDBで使用した場合、対応するjsonの検証チェックと共にJSONタイプが生成されます。\nSQLiteで使用した場合、BLOBに変換されます。\nMSSQLで使用した場合、最初のフィールドへのタイプエイリアスが生成されます。",
table_deleted: "テーブルが削除されました", table_deleted: "テーブルが削除されました",
area_deleted: "エリアが削除されました", area_deleted: "エリアが削除されました",
note_deleted: "ノートが削除されました", note_deleted: "ノートが削除されました",
@ -151,33 +158,45 @@ const japanese = {
create: "作成", create: "作成",
confirm: "確認", confirm: "確認",
last_modified: "最終更新", last_modified: "最終更新",
drag_and_drop_files: "ファイルをここにドラッグ&ドロップするかクリックしてアップロードします。", drag_and_drop_files:
support_json_and_ddb: "JSONおよびDDBファイルがサポートされています", "ファイルをここにドラッグ&ドロップするかクリックしてアップロードします。",
upload_sql_to_generate_diagrams: "SQLファイルをアップロードしてテーブルと列を自動生成します。", upload_sql_to_generate_diagrams:
"SQLファイルをアップロードしてテーブルと列を自動生成します。",
overwrite_existing_diagram: "既存のダイアグラムを上書きする", overwrite_existing_diagram: "既存のダイアグラムを上書きする",
only_mysql_supported: "*現在のところMySQLスクリプトの読み込みのみサポートされています。", only_mysql_supported:
"*現在のところMySQLスクリプトの読み込みのみサポートされています。",
blank: "空白", blank: "空白",
filename: "ファイル名", filename: "ファイル名",
table_w_no_name: "名前のないテーブルが宣言されました", table_w_no_name: "名前のないテーブルが宣言されました",
duplicate_table_by_name: "名前 '{{tableName}}' のテーブルが重複しています", duplicate_table_by_name: "名前 '{{tableName}}' のテーブルが重複しています",
empty_field_name: "テーブル '{{tableName}}' のフィールド `name` が空です", empty_field_name: "テーブル '{{tableName}}' のフィールド `name` が空です",
empty_field_type: "テーブル '{{tableName}}' のフィールド `type` が空です", empty_field_type: "テーブル '{{tableName}}' のフィールド `type` が空です",
no_values_for_field: "テーブル '{{tableName}}' のフィールド '{{fieldName}}' はタイプ `{{type}}` ですが、値が指定されていません", no_values_for_field:
default_doesnt_match_type: "テーブル '{{tableName}}' のフィールド '{{fieldName}}' のデフォルト値がタイプと一致しません", "テーブル '{{tableName}}' のフィールド '{{fieldName}}' はタイプ `{{type}}` ですが、値が指定されていません",
not_null_is_null: "テーブル '{{tableName}}' のフィールド '{{fieldName}}' はNOT NULLですが、デフォルトはNULLです", default_doesnt_match_type:
duplicate_fields: "テーブル '{{tableName}}' 内に名前 '{{fieldName}}' のフィールドが重複しています", "テーブル '{{tableName}}' のフィールド '{{fieldName}}' のデフォルト値がタイプと一致しません",
duplicate_index: "テーブル '{{tableName}}' 内に名前 '{{indexName}}' のインデックスが重複しています", not_null_is_null:
empty_index: "テーブル '{{tableName}}' のインデックスは列をインデックスしていません", "テーブル '{{tableName}}' のフィールド '{{fieldName}}' はNOT NULLですが、デフォルトはNULLです",
duplicate_fields:
"テーブル '{{tableName}}' 内に名前 '{{fieldName}}' のフィールドが重複しています",
duplicate_index:
"テーブル '{{tableName}}' 内に名前 '{{indexName}}' のインデックスが重複しています",
empty_index:
"テーブル '{{tableName}}' のインデックスは列をインデックスしていません",
no_primary_key: "テーブル '{{tableName}}' に主キーがありません", no_primary_key: "テーブル '{{tableName}}' に主キーがありません",
type_with_no_name: "名前のないタイプが宣言されました", type_with_no_name: "名前のないタイプが宣言されました",
duplicate_types: "名前 '{{typeName}}' のタイプが重複しています", duplicate_types: "名前 '{{typeName}}' のタイプが重複しています",
type_w_no_fields: "フィールドのない空のタイプ '{{typeName}}' が宣言されました", type_w_no_fields:
"フィールドのない空のタイプ '{{typeName}}' が宣言されました",
empty_type_field_name: "タイプ '{{typeName}}' のフィールド `name` が空です", empty_type_field_name: "タイプ '{{typeName}}' のフィールド `name` が空です",
empty_type_field_type: "タイプ '{{typeName}}' のフィールド `type` が空です", empty_type_field_type: "タイプ '{{typeName}}' のフィールド `type` が空です",
no_values_for_type_field: "タイプ '{{typeName}}' のフィールド '{{fieldName}}' はタイプ `{{type}}` ですが、値が指定されていません", no_values_for_type_field:
duplicate_type_fields: "タイプ '{{typeName}}' 内に名前 '{{fieldName}}' のフィールドが重複しています", "タイプ '{{typeName}}' のフィールド '{{fieldName}}' はタイプ `{{type}}` ですが、値が指定されていません",
duplicate_type_fields:
"タイプ '{{typeName}}' 内に名前 '{{fieldName}}' のフィールドが重複しています",
duplicate_reference: "名前 '{{refName}}' の参照が重複しています", duplicate_reference: "名前 '{{refName}}' の参照が重複しています",
circular_dependency: "テーブル '{{refName}}' を含む循環依存が検出されました", circular_dependency:
"テーブル '{{refName}}' を含む循環依存が検出されました",
timeline: "タイムライン", timeline: "タイムライン",
priority: "優先度", priority: "優先度",
none: "なし", none: "なし",
@ -207,7 +226,8 @@ const japanese = {
not_found: "見つかりません", not_found: "見つかりません",
pick_db: "データベースを選択", pick_db: "データベースを選択",
generic: "一般", generic: "一般",
generic_description: "一般的なダイアグラムは任意のSQL方言にエクスポートできますが、データタイプのサポートは限定的です。", generic_description:
"一般的なダイアグラムは任意のSQL方言にエクスポートできますが、データタイプのサポートは限定的です。",
enums: "列挙型", enums: "列挙型",
add_enum: "列挙型を追加", add_enum: "列挙型を追加",
edit_enum: "{{extra}} 列挙型 {{enumName}} を編集", edit_enum: "{{extra}} 列挙型 {{enumName}} を編集",
@ -218,16 +238,18 @@ const japanese = {
no_enums: "列挙型がありません", no_enums: "列挙型がありません",
no_enums_text: "ここで列挙型を定義", no_enums_text: "ここで列挙型を定義",
declare_array: "配列を宣言", declare_array: "配列を宣言",
empty_index_name: "テーブル '{{tableName}}' 内で名前のないインデックスが宣言されました", empty_index_name:
"テーブル '{{tableName}}' 内で名前のないインデックスが宣言されました",
didnt_find_diagram: "おっと!ダイアグラムが見つかりませんでした。", didnt_find_diagram: "おっと!ダイアグラムが見つかりませんでした。",
unsigned: "符号なし", unsigned: "符号なし",
share: "共有", share: "共有",
copy_link: "リンクをコピー", copy_link: "リンクをコピー",
readme: "README", readme: "README",
failed_to_load: "読み込みに失敗しました。リンクが正しいか確認してください。", failed_to_load:
share_info: "* このリンクを共有してもリアルタイムコラボレーションセッションは作成されません。" "読み込みに失敗しました。リンクが正しいか確認してください。",
} share_info:
"* このリンクを共有してもリアルタイムコラボレーションセッションは作成されません。",
},
}; };
export { jp, japanese }; export { jp, japanese };

View File

@ -2,11 +2,12 @@ const kannada = {
name: "Kannada", name: "Kannada",
native_name: "ಕನ್ನಡ", native_name: "ಕನ್ನಡ",
code: "ka", code: "ka",
} };
const ka = { const ka = {
translation: { translation: {
report_bug: "ದೋಷವನ್ನು ವರದಿ ಮಾಡಿ", report_bug: "ದೋಷವನ್ನು ವರದಿ ಮಾಡಿ",
import_from: "ಆಮದು",
import: "ಆಮದು", import: "ಆಮದು",
file: "ಫೈಲ್", file: "ಫೈಲ್",
new: "ಹೊಸ", new: "ಹೊಸ",
@ -97,7 +98,8 @@ const ka = {
no_tables: "ಯಾವುದೇ ಕೋಷ್ಟಕಗಳಿಲ್ಲ", no_tables: "ಯಾವುದೇ ಕೋಷ್ಟಕಗಳಿಲ್ಲ",
no_tables_text: "ನಿಮ್ಮ ಚಿತ್ರವನ್ನು ನಿರ್ಮಿಸಲು ಪ್ರಾರಂಭಿಸಿ!", no_tables_text: "ನಿಮ್ಮ ಚಿತ್ರವನ್ನು ನಿರ್ಮಿಸಲು ಪ್ರಾರಂಭಿಸಿ!",
no_relationships: "ಯಾವುದೇ ಸಂಬಂಧಗಳಿಲ್ಲ", no_relationships: "ಯಾವುದೇ ಸಂಬಂಧಗಳಿಲ್ಲ",
no_relationships_text: "ಕ್ಷೇತ್ರಗಳನ್ನು ಸಂಪರ್ಕಿಸಲು ಎಳೆಯಿರಿ ಮತ್ತು ಸಂಬಂಧಗಳನ್ನು ರೂಪಿಸಿ!", no_relationships_text:
"ಕ್ಷೇತ್ರಗಳನ್ನು ಸಂಪರ್ಕಿಸಲು ಎಳೆಯಿರಿ ಮತ್ತು ಸಂಬಂಧಗಳನ್ನು ರೂಪಿಸಿ!",
no_subject_areas: "ಯಾವುದೇ ವಿಷಯ ಪ್ರದೇಶಗಳಿಲ್ಲ", no_subject_areas: "ಯಾವುದೇ ವಿಷಯ ಪ್ರದೇಶಗಳಿಲ್ಲ",
no_subject_areas_text: "ಕೋಷ್ಟಕಗಳನ್ನು ಗುಂಪು ಮಾಡಲು ವಿಷಯ ಪ್ರದೇಶಗಳನ್ನು ಸೇರಿಸಿ!", no_subject_areas_text: "ಕೋಷ್ಟಕಗಳನ್ನು ಗುಂಪು ಮಾಡಲು ವಿಷಯ ಪ್ರದೇಶಗಳನ್ನು ಸೇರಿಸಿ!",
no_notes: "ಯಾವುದೇ ಟಿಪ್ಪಣಿಗಳಿಲ್ಲ", no_notes: "ಯಾವುದೇ ಟಿಪ್ಪಣಿಗಳಿಲ್ಲ",
@ -116,7 +118,8 @@ const ka = {
autoincrement: "ಸ್ವಯಂವೃದ್ಧಿ", autoincrement: "ಸ್ವಯಂವೃದ್ಧಿ",
default_value: "ಪೂರ್ವನಿಯೋಜಿತ", default_value: "ಪೂರ್ವನಿಯೋಜಿತ",
check: "ಪರಿಶೀಲನೆ", check: "ಪರಿಶೀಲನೆ",
this_will_appear_as_is: "*ಇದು ತಯಾರಿಸಲಾದ ಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಹಾಗೆಯೇ ಕಾಣಿಸುತ್ತದೆ.", this_will_appear_as_is:
"*ಇದು ತಯಾರಿಸಲಾದ ಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಹಾಗೆಯೇ ಕಾಣಿಸುತ್ತದೆ.",
comment: "ಟಿಪ್ಪಣಿ", comment: "ಟಿಪ್ಪಣಿ",
add_field: "ಕ್ಷೇತ್ರವನ್ನು ಸೇರಿಸಿ", add_field: "ಕ್ಷೇತ್ರವನ್ನು ಸೇರಿಸಿ",
values: "ಮೌಲ್ಯಗಳು", values: "ಮೌಲ್ಯಗಳು",
@ -156,8 +159,8 @@ const ka = {
create: "ರಚಿಸಿ", create: "ರಚಿಸಿ",
confirm: "ದೃಢೀಕರಿಸಿ", confirm: "ದೃಢೀಕರಿಸಿ",
last_modified: "ಕೊನೆಯದಾಗಿ ಬದಲಾಯಿಸಲಾಗಿದೆ", last_modified: "ಕೊನೆಯದಾಗಿ ಬದಲಾಯಿಸಲಾಗಿದೆ",
drag_and_drop_files: "ಫೈಲ್ ಅನ್ನು ಇಲ್ಲಿ ಎಳೆಯಿರಿ ಅಥವಾ ಅಪ್‌ಲೋಡ್ ಮಾಡಲು ಕ್ಲಿಕ್ ಮಾಡಿ.", drag_and_drop_files:
support_json_and_ddb: "JSON ಮತ್ತು DDB ಫೈಲ್‌ಗಳನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ", "ಫೈಲ್ ಅನ್ನು ಇಲ್ಲಿ ಎಳೆಯಿರಿ ಅಥವಾ ಅಪ್‌ಲೋಡ್ ಮಾಡಲು ಕ್ಲಿಕ್ ಮಾಡಿ.",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"ನಿಮ್ಮ ಕೋಷ್ಟಕಗಳು ಮತ್ತು ಕಂಬಿಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತಯಾರಿಸಲು sql ಫೈಲ್ ಅನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಿ.", "ನಿಮ್ಮ ಕೋಷ್ಟಕಗಳು ಮತ್ತು ಕಂಬಿಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತಯಾರಿಸಲು sql ಫೈಲ್ ಅನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಿ.",
overwrite_existing_diagram: "ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಚಿತ್ರವನ್ನು ಮರುಬರೆಯಿರಿ", overwrite_existing_diagram: "ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಚಿತ್ರವನ್ನು ಮರುಬರೆಯಿರಿ",
@ -179,11 +182,13 @@ const ka = {
"ಕೋಷ್ಟಕ '{{tableName}}' ನಲ್ಲಿ ಹೆಸರಿನ ಮೂಲಕ ನಕಲು ಕೋಷ್ಟಕ ಕ್ಷೇತ್ರಗಳು '{{fieldName}}'", "ಕೋಷ್ಟಕ '{{tableName}}' ನಲ್ಲಿ ಹೆಸರಿನ ಮೂಲಕ ನಕಲು ಕೋಷ್ಟಕ ಕ್ಷೇತ್ರಗಳು '{{fieldName}}'",
duplicate_index: duplicate_index:
"ಕೋಷ್ಟಕ '{{tableName}}' ನಲ್ಲಿ ಹೆಸರಿನ ಮೂಲಕ ನಕಲು ಸೂಚಿ '{{indexName}}'", "ಕೋಷ್ಟಕ '{{tableName}}' ನಲ್ಲಿ ಹೆಸರಿನ ಮೂಲಕ ನಕಲು ಸೂಚಿ '{{indexName}}'",
empty_index: "ಕೋಷ್ಟಕ '{{tableName}}' ನಲ್ಲಿ ಸೂಚಿ ಯಾವುದೇ ಕಂಬಿಗಳನ್ನು ಸೂಚಿಸುತ್ತಿಲ್ಲ", empty_index:
"ಕೋಷ್ಟಕ '{{tableName}}' ನಲ್ಲಿ ಸೂಚಿ ಯಾವುದೇ ಕಂಬಿಗಳನ್ನು ಸೂಚಿಸುತ್ತಿಲ್ಲ",
no_primary_key: "ಕೋಷ್ಟಕ '{{tableName}}' ನಲ್ಲಿ ಪ್ರಾಥಮಿಕ ಕೀ ಇಲ್ಲ", no_primary_key: "ಕೋಷ್ಟಕ '{{tableName}}' ನಲ್ಲಿ ಪ್ರಾಥಮಿಕ ಕೀ ಇಲ್ಲ",
type_with_no_name: "ಹೆಸರಿಲ್ಲದ ಪ್ರಕಾರವನ್ನು ಘೋಷಿಸಲಾಗಿದೆ", type_with_no_name: "ಹೆಸರಿಲ್ಲದ ಪ್ರಕಾರವನ್ನು ಘೋಷಿಸಲಾಗಿದೆ",
duplicate_types: "ಹೆಸರಿನ ಮೂಲಕ ನಕಲು ಪ್ರಕಾರಗಳು '{{typeName}}'", duplicate_types: "ಹೆಸರಿನ ಮೂಲಕ ನಕಲು ಪ್ರಕಾರಗಳು '{{typeName}}'",
type_w_no_fields: "ಕ್ಷೇತ್ರಗಳಿಲ್ಲದ ಖಾಲಿ ಪ್ರಕಾರ '{{typeName}}' ಅನ್ನು ಘೋಷಿಸಲಾಗಿದೆ", type_w_no_fields:
"ಕ್ಷೇತ್ರಗಳಿಲ್ಲದ ಖಾಲಿ ಪ್ರಕಾರ '{{typeName}}' ಅನ್ನು ಘೋಷಿಸಲಾಗಿದೆ",
empty_type_field_name: "ಪ್ರಕಾರ '{{typeName}}' ನಲ್ಲಿ ಖಾಲಿ ಕ್ಷೇತ್ರ `ಹೆಸರು`", empty_type_field_name: "ಪ್ರಕಾರ '{{typeName}}' ನಲ್ಲಿ ಖಾಲಿ ಕ್ಷೇತ್ರ `ಹೆಸರು`",
empty_type_field_type: "ಪ್ರಕಾರ '{{typeName}}' ನಲ್ಲಿ ಖಾಲಿ ಕ್ಷೇತ್ರ `ಪ್ರಕಾರ`", empty_type_field_type: "ಪ್ರಕಾರ '{{typeName}}' ನಲ್ಲಿ ಖಾಲಿ ಕ್ಷೇತ್ರ `ಪ್ರಕಾರ`",
no_values_for_type_field: no_values_for_type_field:
@ -233,13 +238,15 @@ const ka = {
no_enums: "ಯಾವುದೇ ಎನಮ್‌ಗಳಿಲ್ಲ", no_enums: "ಯಾವುದೇ ಎನಮ್‌ಗಳಿಲ್ಲ",
no_enums_text: "ಇಲ್ಲಿ ಎನಮ್‌ಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಿ", no_enums_text: "ಇಲ್ಲಿ ಎನಮ್‌ಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಿ",
declare_array: "ಅರೆ ಅನ್ನು ಘೋಷಿಸಿ", declare_array: "ಅರೆ ಅನ್ನು ಘೋಷಿಸಿ",
empty_index_name: "ಕೋಷ್ಟಕ '{{tableName}}' ನಲ್ಲಿ ಹೆಸರಿಲ್ಲದ ಸೂಚಿಯನ್ನು ಘೋಷಿಸಲಾಗಿದೆ", empty_index_name:
"ಕೋಷ್ಟಕ '{{tableName}}' ನಲ್ಲಿ ಹೆಸರಿಲ್ಲದ ಸೂಚಿಯನ್ನು ಘೋಷಿಸಲಾಗಿದೆ",
didnt_find_diagram: "ಅಯ್ಯೋ! ಚಿತ್ರವನ್ನು ಕಂಡುಹಿಡಿಯಲಿಲ್ಲ.", didnt_find_diagram: "ಅಯ್ಯೋ! ಚಿತ್ರವನ್ನು ಕಂಡುಹಿಡಿಯಲಿಲ್ಲ.",
unsigned: "ಅನ್‌ಸೈನ್ ಮಾಡಲಾಗಿದೆ", unsigned: "ಅನ್‌ಸೈನ್ ಮಾಡಲಾಗಿದೆ",
share: "ಹಂಚಿಕೊಳ್ಳಿ", share: "ಹಂಚಿಕೊಳ್ಳಿ",
copy_link: "ಲಿಂಕ್ ನಕಲಿಸಿ", copy_link: "ಲಿಂಕ್ ನಕಲಿಸಿ",
readme: "README", readme: "README",
failed_to_load: "ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ. ಲಿಂಕ್ ಸರಿಯಾಗಿದೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.", failed_to_load:
"ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ. ಲಿಂಕ್ ಸರಿಯಾಗಿದೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.",
share_info: share_info:
"* ಈ ಲಿಂಕ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳುವುದರಿಂದ ಲೈವ್ ರಿಯಲ್-ಟೈಮ್ ಸಹಯೋಗ ಸೆಷನ್ ರಚಿಸಲಾಗುವುದಿಲ್ಲ.", "* ಈ ಲಿಂಕ್ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳುವುದರಿಂದ ಲೈವ್ ರಿಯಲ್-ಟೈಮ್ ಸಹಯೋಗ ಸೆಷನ್ ರಚಿಸಲಾಗುವುದಿಲ್ಲ.",
}, },

View File

@ -7,6 +7,7 @@ const korean = {
const ko = { const ko = {
translation: { translation: {
report_bug: "문제 보고", report_bug: "문제 보고",
import_from: "가져오기",
import: "가져오기", import: "가져오기",
file: "파일", file: "파일",
new: "새로 만들기", new: "새로 만들기",
@ -18,7 +19,8 @@ const ko = {
template_saved: "템플릿이 저장되었습니다!", template_saved: "템플릿이 저장되었습니다!",
rename: "이름 변경", rename: "이름 변경",
delete_diagram: "다이어그램 삭제", delete_diagram: "다이어그램 삭제",
are_you_sure_delete_diagram: "이 다이어그램을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.", are_you_sure_delete_diagram:
"이 다이어그램을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.",
oops_smth_went_wrong: "이런! 문제가 발생했습니다.", oops_smth_went_wrong: "이런! 문제가 발생했습니다.",
import_diagram: "다이어그램 가져오기", import_diagram: "다이어그램 가져오기",
import_from_source: "SQL에서 가져오기", import_from_source: "SQL에서 가져오기",
@ -30,7 +32,8 @@ const ko = {
undo: "실행 취소", undo: "실행 취소",
redo: "다시 실행", redo: "다시 실행",
clear: "지우기", clear: "지우기",
are_you_sure_clear: "이 다이어그램을 지우시겠습니까? 이 작업은 되돌릴 수 없습니다.", are_you_sure_clear:
"이 다이어그램을 지우시겠습니까? 이 작업은 되돌릴 수 없습니다.",
cut: "잘라내기", cut: "잘라내기",
copy: "복사", copy: "복사",
paste: "붙여넣기", paste: "붙여넣기",
@ -67,7 +70,8 @@ const ko = {
table_width: "테이블 너비", table_width: "테이블 너비",
language: "언어", language: "언어",
flush_storage: "저장소 비우기", flush_storage: "저장소 비우기",
are_you_sure_flush_storage: "저장소를 비우시겠습니까? 이 작업은 되돌릴 수 없으며 모든 다이어그램과 사용자 정의 템플릿이 삭제됩니다.", are_you_sure_flush_storage:
"저장소를 비우시겠습니까? 이 작업은 되돌릴 수 없으며 모든 다이어그램과 사용자 정의 템플릿이 삭제됩니다.",
storage_flushed: "저장소가 비워졌습니다", storage_flushed: "저장소가 비워졌습니다",
help: "도움말", help: "도움말",
shortcuts: "단축키", shortcuts: "단축키",
@ -102,7 +106,8 @@ const ko = {
no_types: "유형 없음", no_types: "유형 없음",
no_types_text: "사용자 정의 데이터 유형을 만드세요", no_types_text: "사용자 정의 데이터 유형을 만드세요",
no_issues: "감지된 이슈가 없습니다.", no_issues: "감지된 이슈가 없습니다.",
strict_mode_is_on_no_issues: "엄격 모드가 꺼져 있어 이슈가 표시되지 않습니다.", strict_mode_is_on_no_issues:
"엄격 모드가 꺼져 있어 이슈가 표시되지 않습니다.",
name: "이름", name: "이름",
type: "유형", type: "유형",
null: "널", null: "널",
@ -134,7 +139,8 @@ const ko = {
one_to_many: "일 대 다", one_to_many: "일 대 다",
many_to_one: "다 대 일", many_to_one: "다 대 일",
content: "내용", content: "내용",
types_info: "이 기능은 PostgreSQL과 같은 객체 관계형 데이터베이스 관리 시스템에 적합합니다.\nMySQL 또는 MariaDB에서는 해당 JSON 검사를 포함한 JSON 유형으로 생성됩니다.\nSQLite에서는 BLOB으로 변환됩니다.\nMSSQL에서는 첫 번째 필드의 유형 별칭이 생성됩니다.", types_info:
"이 기능은 PostgreSQL과 같은 객체 관계형 데이터베이스 관리 시스템에 적합합니다.\nMySQL 또는 MariaDB에서는 해당 JSON 검사를 포함한 JSON 유형으로 생성됩니다.\nSQLite에서는 BLOB으로 변환됩니다.\nMSSQL에서는 첫 번째 필드의 유형 별칭이 생성됩니다.",
table_deleted: "테이블이 삭제되었습니다", table_deleted: "테이블이 삭제되었습니다",
area_deleted: "영역이 삭제되었습니다", area_deleted: "영역이 삭제되었습니다",
note_deleted: "노트가 삭제되었습니다", note_deleted: "노트가 삭제되었습니다",
@ -152,30 +158,39 @@ const ko = {
confirm: "확인", confirm: "확인",
last_modified: "마지막 수정", last_modified: "마지막 수정",
drag_and_drop_files: "파일을 여기에 끌어다 놓거나 클릭하여 업로드하세요.", drag_and_drop_files: "파일을 여기에 끌어다 놓거나 클릭하여 업로드하세요.",
support_json_and_ddb: "JSON 및 DDB 파일을 지원합니다", upload_sql_to_generate_diagrams:
upload_sql_to_generate_diagrams: "SQL 파일을 업로드하여 테이블과 열을 자동 생성하세요.", "SQL 파일을 업로드하여 테이블과 열을 자동 생성하세요.",
overwrite_existing_diagram: "기존 다이어그램 덮어쓰기", overwrite_existing_diagram: "기존 다이어그램 덮어쓰기",
only_mysql_supported: "현재는 MySQL 스크립트만 지원합니다.", only_mysql_supported: "현재는 MySQL 스크립트만 지원합니다.",
blank: "비어있음", blank: "비어있음",
filename: "파일 이름", filename: "파일 이름",
table_w_no_name: "이름이 없는 테이블이 선언되었습니다", table_w_no_name: "이름이 없는 테이블이 선언되었습니다",
duplicate_table_by_name: "'{{tableName}}'라는 이름의 테이블이 중복 선언되었습니다", duplicate_table_by_name:
"'{{tableName}}'라는 이름의 테이블이 중복 선언되었습니다",
empty_field_name: "'{{tableName}}' 테이블의 필드 'name'이 비어 있습니다", empty_field_name: "'{{tableName}}' 테이블의 필드 'name'이 비어 있습니다",
empty_field_type: "'{{tableName}}' 테이블의 필드 'type'이 비어 있습니다", empty_field_type: "'{{tableName}}' 테이블의 필드 'type'이 비어 있습니다",
no_values_for_field: "'{{tableName}}' 테이블의 '{{fieldName}}' 필드 유형이 '{{type}}'이지만 값이 지정되지 않았습니다", no_values_for_field:
default_doesnt_match_type: "'{{tableName}}' 테이블의 '{{fieldName}}' 필드 기본값이 유형과 일치하지 않습니다", "'{{tableName}}' 테이블의 '{{fieldName}}' 필드 유형이 '{{type}}'이지만 값이 지정되지 않았습니다",
not_null_is_null: "'{{tableName}}' 테이블의 '{{fieldName}}' 필드가 NOT NULL이지만 기본값이 NULL입니다", default_doesnt_match_type:
duplicate_fields: "'{{tableName}}' 테이블에서 '{{fieldName}}' 필드가 중복 선언되었습니다", "'{{tableName}}' 테이블의 '{{fieldName}}' 필드 기본값이 유형과 일치하지 않습니다",
duplicate_index: "'{{tableName}}' 테이블에서 '{{indexName}}' 인덱스가 중복 선언되었습니다", not_null_is_null:
"'{{tableName}}' 테이블의 '{{fieldName}}' 필드가 NOT NULL이지만 기본값이 NULL입니다",
duplicate_fields:
"'{{tableName}}' 테이블에서 '{{fieldName}}' 필드가 중복 선언되었습니다",
duplicate_index:
"'{{tableName}}' 테이블에서 '{{indexName}}' 인덱스가 중복 선언되었습니다",
empty_index: "'{{tableName}}' 테이블의 인덱스에 열이 지정되지 않았습니다", empty_index: "'{{tableName}}' 테이블의 인덱스에 열이 지정되지 않았습니다",
no_primary_key: "'{{tableName}}' 테이블에 기본 키가 없습니다", no_primary_key: "'{{tableName}}' 테이블에 기본 키가 없습니다",
type_with_no_name: "이름이 없는 유형이 선언되었습니다", type_with_no_name: "이름이 없는 유형이 선언되었습니다",
duplicate_types: "'{{typeName}}'라는 이름의 유형이 중복 선언되었습니다", duplicate_types: "'{{typeName}}'라는 이름의 유형이 중복 선언되었습니다",
type_w_no_fields: "'{{typeName}}' 유형에 필드가 없는 빈 유형이 선언되었습니다", type_w_no_fields:
"'{{typeName}}' 유형에 필드가 없는 빈 유형이 선언되었습니다",
empty_type_field_name: "'{{typeName}}' 유형의 필드 'name'이 비어 있습니다", empty_type_field_name: "'{{typeName}}' 유형의 필드 'name'이 비어 있습니다",
empty_type_field_type: "'{{typeName}}' 유형의 필드 'type'이 비어 있습니다", empty_type_field_type: "'{{typeName}}' 유형의 필드 'type'이 비어 있습니다",
no_values_for_type_field: "'{{typeName}}' 유형의 '{{fieldName}}' 필드 유형이 '{{type}}'이지만 값이 지정되지 않았습니다", no_values_for_type_field:
duplicate_type_fields: "'{{typeName}}' 사용자 정의 클래스에서 '{{fieldName}}' 필드가 중복 선언되었습니다", "'{{typeName}}' 유형의 '{{fieldName}}' 필드 유형이 '{{type}}'이지만 값이 지정되지 않았습니다",
duplicate_type_fields:
"'{{typeName}}' 사용자 정의 클래스에서 '{{fieldName}}' 필드가 중복 선언되었습니다",
duplicate_reference: "'{{refName}}'라는 이름의 참조가 중복 선언되었습니다", duplicate_reference: "'{{refName}}'라는 이름의 참조가 중복 선언되었습니다",
circular_dependency: "'{{refName}}' 테이블을 포함한 순환 종속이 있습니다", circular_dependency: "'{{refName}}' 테이블을 포함한 순환 종속이 있습니다",
timeline: "타임라인", timeline: "타임라인",
@ -207,7 +222,8 @@ const ko = {
not_found: "찾을 수 없음", not_found: "찾을 수 없음",
pick_db: "데이터베이스 선택", pick_db: "데이터베이스 선택",
generic: "일반", generic: "일반",
generic_description: "일반 다이어그램은 모든 SQL 유형으로 내보낼 수 있지만 지원하는 데이터 유형이 적습니다.", generic_description:
"일반 다이어그램은 모든 SQL 유형으로 내보낼 수 있지만 지원하는 데이터 유형이 적습니다.",
enums: "열거형", enums: "열거형",
add_enum: "열거형 추가", add_enum: "열거형 추가",
edit_enum: "{{extra}} 열거형 {{enumName}} 수정", edit_enum: "{{extra}} 열거형 {{enumName}} 수정",
@ -218,7 +234,8 @@ const ko = {
no_enums: "열거형 없음", no_enums: "열거형 없음",
no_enums_text: "여기에 열거형을 정의하세요", no_enums_text: "여기에 열거형을 정의하세요",
declare_array: "배열 선언", declare_array: "배열 선언",
empty_index_name: "'{{tableName}}' 테이블에 이름 없는 인덱스가 선언되었습니다", empty_index_name:
"'{{tableName}}' 테이블에 이름 없는 인덱스가 선언되었습니다",
didnt_find_diagram: "이런! 다이어그램을 찾을 수 없습니다.", didnt_find_diagram: "이런! 다이어그램을 찾을 수 없습니다.",
unsigned: "부호 없음", unsigned: "부호 없음",
}, },

View File

@ -2,11 +2,12 @@ const marathi = {
name: "Marathi", name: "Marathi",
native_name: "मराठी", native_name: "मराठी",
code: "mr", code: "mr",
}; };
const mr = { const mr = {
translation: { translation: {
report_bug: "बग रिपोर्ट करा", report_bug: "बग रिपोर्ट करा",
import_from: "आयात",
import: "आयात", import: "आयात",
file: "फाइल", file: "फाइल",
new: "नवीन", new: "नवीन",
@ -149,13 +150,12 @@ const marathi = {
create: "तयार करा", create: "तयार करा",
confirm: "पुष्टी करा", confirm: "पुष्टी करा",
last_modified: "शेवटचे बदलले", last_modified: "शेवटचे बदलले",
drag_and_drop_files: "फाइल येथे खेचा आणि सोडा किंवा अपलोड करण्यासाठी क्लिक करा.", drag_and_drop_files:
support_json_and_ddb: "JSON आणि DDB फाइल्स समर्थित आहेत", "फाइल येथे खेचा आणि सोडा किंवा अपलोड करण्यासाठी क्लिक करा.",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"आपल्या टेबल आणि कॉलम स्वयंचलितपणे जेनरेट करण्यासाठी SQL फाइल अपलोड करा.", "आपल्या टेबल आणि कॉलम स्वयंचलितपणे जेनरेट करण्यासाठी SQL फाइल अपलोड करा.",
overwrite_existing_diagram: "मौजूदा डायग्राम अधिलेखित करा", overwrite_existing_diagram: "मौजूदा डायग्राम अधिलेखित करा",
only_mysql_supported: only_mysql_supported: "*सध्या फक्त MySQL स्क्रिप्ट्स लोड करणे समर्थित आहे.",
"*सध्या फक्त MySQL स्क्रिप्ट्स लोड करणे समर्थित आहे.",
blank: "रिक्त", blank: "रिक्त",
filename: "फाइलनाम", filename: "फाइलनाम",
table_w_no_name: "नाव नसलेल्या टेबलची घोषणा केली", table_w_no_name: "नाव नसलेल्या टेबलची घोषणा केली",
@ -172,7 +172,8 @@ const marathi = {
"टेबल '{{tableName}}' मध्ये नाव '{{fieldName}}' असलेले डुप्लिकेट टेबल फील्ड्स", "टेबल '{{tableName}}' मध्ये नाव '{{fieldName}}' असलेले डुप्लिकेट टेबल फील्ड्स",
duplicate_index: duplicate_index:
"टेबल '{{tableName}}' मध्ये नाव '{{indexName}}' असलेला डुप्लिकेट इंडेक्स", "टेबल '{{tableName}}' मध्ये नाव '{{indexName}}' असलेला डुप्लिकेट इंडेक्स",
empty_index: "टेबल '{{tableName}}' मध्ये इंडेक्स कोणताही कॉलम इंडेक्स करत नाही", empty_index:
"टेबल '{{tableName}}' मध्ये इंडेक्स कोणताही कॉलम इंडेक्स करत नाही",
no_primary_key: "टेबल '{{tableName}}' मध्ये कोणतीही प्राथमिक कुंजी नाही", no_primary_key: "टेबल '{{tableName}}' मध्ये कोणतीही प्राथमिक कुंजी नाही",
type_with_no_name: "नाव नसलेला प्रकार घोषित केला", type_with_no_name: "नाव नसलेला प्रकार घोषित केला",
duplicate_types: "नाव '{{typeName}}' असलेले डुप्लिकेट प्रकार", duplicate_types: "नाव '{{typeName}}' असलेले डुप्लिकेट प्रकार",
@ -213,7 +214,6 @@ const marathi = {
delete_relationship: "संबंध हटवा {{refName}}", delete_relationship: "संबंध हटवा {{refName}}",
not_found: "सापडले नाही", not_found: "सापडले नाही",
}, },
}; };
export { mr, marathi };
export { mr, marathi };

View File

@ -2,11 +2,12 @@ const nepali = {
name: "Nepali", name: "Nepali",
native_name: "नेपाली", native_name: "नेपाली",
code: "ne", code: "ne",
}; };
const ne = { const ne = {
translation: { translation: {
report_bug: "बग रिपोर्ट गर्नुहोस्", report_bug: "बग रिपोर्ट गर्नुहोस्",
import_from: "इम्पोर्ट गर्नुहोस्",
import: "इम्पोर्ट गर्नुहोस्", import: "इम्पोर्ट गर्नुहोस्",
file: "फाइल", file: "फाइल",
new: "नयाँ", new: "नयाँ",
@ -109,7 +110,8 @@ const nepali = {
autoincrement: "स्वतः वृद्धि", autoincrement: "स्वतः वृद्धि",
default_value: "डिफल्ट", default_value: "डिफल्ट",
check: "चेक अभिव्यक्ति", check: "चेक अभिव्यक्ति",
this_will_appear_as_is: "*यो जेनरेट गरिएको स्क्रिप्टमा जसरी हुन्छ त्यस्तै देखिनेछ।", this_will_appear_as_is:
"*यो जेनरेट गरिएको स्क्रिप्टमा जसरी हुन्छ त्यस्तै देखिनेछ।",
comment: "टिप्पणी", comment: "टिप्पणी",
add_field: "फिल्ड थप्नुहोस्", add_field: "फिल्ड थप्नुहोस्",
values: "मानहरू", values: "मानहरू",
@ -149,8 +151,8 @@ const nepali = {
create: "बनाउनुहोस्", create: "बनाउनुहोस्",
confirm: "पुष्टि गर्नुहोस्", confirm: "पुष्टि गर्नुहोस्",
last_modified: "अन्तिम पटक संशोधित", last_modified: "अन्तिम पटक संशोधित",
drag_and_drop_files: "फाइललाई यहाँ तानेर छोड्नुहोस् वा अपलोड गर्न क्लिक गर्नुहोस्।", drag_and_drop_files:
support_json_and_ddb: "JSON र DDB फाइलहरू समर्थित छन्", "फाइललाई यहाँ तानेर छोड्नुहोस् वा अपलोड गर्न क्लिक गर्नुहोस्।",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"स्वचालित रूपमा डायग्राम सिर्जना गर्न SQL फाइल अपलोड गर्नुहोस्।", "स्वचालित रूपमा डायग्राम सिर्जना गर्न SQL फाइल अपलोड गर्नुहोस्।",
overwrite_existing_diagram: "मौजुदा डायग्रामलाई अधिलेखित गर्नुहोस्", overwrite_existing_diagram: "मौजुदा डायग्रामलाई अधिलेखित गर्नुहोस्",
@ -172,7 +174,8 @@ const nepali = {
"तालिका '{{tableName}}' मा नाम '{{fieldName}}' भएका दोहोरो तालिका क्षेत्रहरू", "तालिका '{{tableName}}' मा नाम '{{fieldName}}' भएका दोहोरो तालिका क्षेत्रहरू",
duplicate_index: duplicate_index:
"तालिका '{{tableName}}' मा नाम '{{indexName}}' भएको दोहोरो सूची", "तालिका '{{tableName}}' मा नाम '{{indexName}}' भएको दोहोरो सूची",
empty_index: "तालिका '{{tableName}}' मा सूची कुनै पनि स्तम्भ सूची गरिरहेको छैन", empty_index:
"तालिका '{{tableName}}' मा सूची कुनै पनि स्तम्भ सूची गरिरहेको छैन",
no_primary_key: "तालिका '{{tableName}}' मा कुनै प्रमुख कुञ्जी छैन", no_primary_key: "तालिका '{{tableName}}' मा कुनै प्रमुख कुञ्जी छैन",
type_with_no_name: "कुनै नाम नभएको प्रकार घोषण गरिएको छ", type_with_no_name: "कुनै नाम नभएको प्रकार घोषण गरिएको छ",
duplicate_types: "नाम '{{typeName}}' भएका दोहोरो प्रकार", duplicate_types: "नाम '{{typeName}}' भएका दोहोरो प्रकार",
@ -211,8 +214,8 @@ const nepali = {
add_relationship: "संबन्ध थप्नुहोस्", add_relationship: "संबन्ध थप्नुहोस्",
edit_relationship: "{{extra}} सम्बन्ध सम्पादन गर्नुहोस् {{refName}}", edit_relationship: "{{extra}} सम्बन्ध सम्पादन गर्नुहोस् {{refName}}",
delete_relationship: "संबन्ध मेटाउनुहोस् {{refName}}", delete_relationship: "संबन्ध मेटाउनुहोस् {{refName}}",
not_found: "फेला परेन" not_found: "फेला परेन",
}, },
}; };
export { ne, nepali }; export { ne, nepali };

View File

@ -2,11 +2,12 @@ const norwegian = {
name: "Norwegian", name: "Norwegian",
native_name: "Norsk", native_name: "Norsk",
code: "no", code: "no",
}; };
const no = { const no = {
translation: { translation: {
report_bug: "Rapporter en feil", report_bug: "Rapporter en feil",
import_from: "Importer",
import: "Importer", import: "Importer",
file: "Fil", file: "Fil",
new: "Ny", new: "Ny",
@ -116,7 +117,8 @@ const norwegian = {
autoincrement: "Autoinkrement", autoincrement: "Autoinkrement",
default_value: "Standardverdi", default_value: "Standardverdi",
check: "Sjekk uttrykk", check: "Sjekk uttrykk",
this_will_appear_as_is: "*Dette vil vises i det genererte skriptet som det er.", this_will_appear_as_is:
"*Dette vil vises i det genererte skriptet som det er.",
comment: "Kommentar", comment: "Kommentar",
add_field: "Legg til felt", add_field: "Legg til felt",
values: "Verdier", values: "Verdier",
@ -157,12 +159,10 @@ const norwegian = {
confirm: "Bekreft", confirm: "Bekreft",
last_modified: "Sist endret", last_modified: "Sist endret",
drag_and_drop_files: "Dra og slipp filen her eller klikk for å laste opp.", drag_and_drop_files: "Dra og slipp filen her eller klikk for å laste opp.",
support_json_and_ddb: "JSON- og DDB-filer støttes",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"Last opp en SQL-fil for å autogenerere dine tabeller og kolonner.", "Last opp en SQL-fil for å autogenerere dine tabeller og kolonner.",
overwrite_existing_diagram: "Overskriv eksisterende diagram", overwrite_existing_diagram: "Overskriv eksisterende diagram",
only_mysql_supported: only_mysql_supported: "*For tiden støttes kun lasting av MySQL-skript.",
"*For tiden støttes kun lasting av MySQL-skript.",
blank: "Blank", blank: "Blank",
filename: "Filnavn", filename: "Filnavn",
table_w_no_name: "Deklarerte en tabell uten navn", table_w_no_name: "Deklarerte en tabell uten navn",
@ -191,7 +191,8 @@ const norwegian = {
duplicate_type_fields: duplicate_type_fields:
"Duplikatfelter med navnet '{{fieldName}}' i type '{{typeName}}'", "Duplikatfelter med navnet '{{fieldName}}' i type '{{typeName}}'",
duplicate_reference: "Duplikatreferanse med navnet '{{refName}}'", duplicate_reference: "Duplikatreferanse med navnet '{{refName}}'",
circular_dependency: "Sirkulær avhengighet som involverer tabell '{{refName}}'", circular_dependency:
"Sirkulær avhengighet som involverer tabell '{{refName}}'",
timeline: "Tidslinje", timeline: "Tidslinje",
priority: "Prioritet", priority: "Prioritet",
none: "Ingen", none: "Ingen",
@ -243,6 +244,6 @@ const norwegian = {
share_info: share_info:
"* Å dele denne lenken vil ikke opprette en live sanntidssamarbeidssession.", "* Å dele denne lenken vil ikke opprette en live sanntidssamarbeidssession.",
}, },
}; };
export { no, norwegian }; export { no, norwegian };

View File

@ -7,6 +7,7 @@ const odia = {
const od = { const od = {
translation: { translation: {
report_bug: "ବଗ୍ ରିପୋର୍ଟ କରନ୍ତୁ", report_bug: "ବଗ୍ ରିପୋର୍ଟ କରନ୍ତୁ",
import_from: "ଆମଦାନି",
import: "ଆମଦାନି", import: "ଆମଦାନି",
file: "ଫାଇଲ୍", file: "ଫାଇଲ୍",
new: "ନୂତନ", new: "ନୂତନ",
@ -152,7 +153,6 @@ const od = {
last_modified: "ଶେଷ ସମୟରେ ସଂଶୋଧିତ", last_modified: "ଶେଷ ସମୟରେ ସଂଶୋଧିତ",
drag_and_drop_files: drag_and_drop_files:
"ଫାଇଲ୍କୁ ଏଠାରେ ଟାଣନ୍ତୁ ଏବଂ ଛାଡନ୍ତୁ କିମ୍ବା ଅପଲୋଡ୍ କରିବାକୁ କ୍ଲିକ୍ କରନ୍ତୁ।", "ଫାଇଲ୍କୁ ଏଠାରେ ଟାଣନ୍ତୁ ଏବଂ ଛାଡନ୍ତୁ କିମ୍ବା ଅପଲୋଡ୍ କରିବାକୁ କ୍ଲିକ୍ କରନ୍ତୁ।",
support_json_and_ddb: "JSON ଏବଂ DDB ଫାଇଲ୍ଗୁଡିକ ସମର୍ଥିତ",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"ଆପଣଙ୍କର ଟେବଲ୍ ଏବଂ କଲମ୍ଗୁଡିକୁ ସ୍ୱୟଂଚାଳିତ ଭାବରେ ଜେନେରେଟ୍ କରିବାକୁ ଏକ sql ଫାଇଲ୍ ଅପଲୋଡ୍ କରନ୍ତୁ।", "ଆପଣଙ୍କର ଟେବଲ୍ ଏବଂ କଲମ୍ଗୁଡିକୁ ସ୍ୱୟଂଚାଳିତ ଭାବରେ ଜେନେରେଟ୍ କରିବାକୁ ଏକ sql ଫାଇଲ୍ ଅପଲୋଡ୍ କରନ୍ତୁ।",
overwrite_existing_diagram: "ବର୍ତ୍ତମାନର ଡାୟାଗ୍ରାମ୍କୁ ଅଧିଲେଖନ କରନ୍ତୁ", overwrite_existing_diagram: "ବର୍ତ୍ତମାନର ଡାୟାଗ୍ରାମ୍କୁ ଅଧିଲେଖନ କରନ୍ତୁ",

View File

@ -7,6 +7,7 @@ const punjabi = {
const pa = { const pa = {
translation: { translation: {
report_bug: "ਬੱਗ ਰਿਪੋਰਟ ਕਰੋ", report_bug: "ਬੱਗ ਰਿਪੋਰਟ ਕਰੋ",
import_from: "ਇੰਪੋਰਟ ਕਰੋ",
import: "ਇੰਪੋਰਟ ਕਰੋ", import: "ਇੰਪੋਰਟ ਕਰੋ",
file: "ਫਾਈਲ", file: "ਫਾਈਲ",
new: "ਨਵਾਂ", new: "ਨਵਾਂ",
@ -152,7 +153,6 @@ const pa = {
last_modified: "ਆਖਰੀ ਵਾਰ ਬਦਲਿਆ ਗਿਆ", last_modified: "ਆਖਰੀ ਵਾਰ ਬਦਲਿਆ ਗਿਆ",
drag_and_drop_files: drag_and_drop_files:
"ਫਾਈਲ ਨੂੰ ਇੱਥੇ ਖਿੱਚੋ ਅਤੇ ਛੱਡੋ ਜਾਂ ਅੱਪਲੋਡ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ।", "ਫਾਈਲ ਨੂੰ ਇੱਥੇ ਖਿੱਚੋ ਅਤੇ ਛੱਡੋ ਜਾਂ ਅੱਪਲੋਡ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ।",
support_json_and_ddb: "JSON ਅਤੇ DDB ਫਾਈਲਾਂ ਸਮਰਥਿਤ ਹਨ",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"ਆਪਣੇ ਟੇਬਲਾਂ ਅਤੇ ਕਾਲਮਾਂ ਨੂੰ ਆਪਣੇ ਆਪ ਜਨਰੇਟ ਕਰਨ ਲਈ ਇੱਕ SQL ਫਾਈਲ ਅੱਪਲੋਡ ਕਰੋ।", "ਆਪਣੇ ਟੇਬਲਾਂ ਅਤੇ ਕਾਲਮਾਂ ਨੂੰ ਆਪਣੇ ਆਪ ਜਨਰੇਟ ਕਰਨ ਲਈ ਇੱਕ SQL ਫਾਈਲ ਅੱਪਲੋਡ ਕਰੋ।",
overwrite_existing_diagram: "ਮੌਜੂਦਾ ਡਾਯਾਗ੍ਰਾਮ ਨੂੰ ਓਵਰਰਾਈਟ ਕਰੋ", overwrite_existing_diagram: "ਮੌਜੂਦਾ ਡਾਯਾਗ੍ਰਾਮ ਨੂੰ ਓਵਰਰਾਈਟ ਕਰੋ",

View File

@ -2,11 +2,12 @@ const polish = {
name: "Polish", name: "Polish",
native_name: "Polski", native_name: "Polski",
code: "pl", code: "pl",
}; };
const pl = { const pl = {
translation: { translation: {
report_bug: "Zgłoś błąd", report_bug: "Zgłoś błąd",
import_from: "Importuj",
import: "Importuj", import: "Importuj",
file: "Plik", file: "Plik",
new: "Nowy", new: "Nowy",
@ -116,7 +117,8 @@ const polish = {
autoincrement: "Autonumerowanie", autoincrement: "Autonumerowanie",
default_value: "Wartość domyślna", default_value: "Wartość domyślna",
check: "Wyrażenie sprawdzające", check: "Wyrażenie sprawdzające",
this_will_appear_as_is: "*To pojawi się w wygenerowanym skrypcie tak, jak jest.", this_will_appear_as_is:
"*To pojawi się w wygenerowanym skrypcie tak, jak jest.",
comment: "Komentarz", comment: "Komentarz",
add_field: "Dodaj pole", add_field: "Dodaj pole",
values: "Wartości", values: "Wartości",
@ -156,8 +158,8 @@ const polish = {
create: "Utwórz", create: "Utwórz",
confirm: "Potwierdź", confirm: "Potwierdź",
last_modified: "Ostatnio zmodyfikowano", last_modified: "Ostatnio zmodyfikowano",
drag_and_drop_files: "Przeciągnij i upuść plik tutaj lub kliknij, aby przesłać.", drag_and_drop_files:
support_json_and_ddb: "Obsługiwane są pliki JSON i DDB", "Przeciągnij i upuść plik tutaj lub kliknij, aby przesłać.",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"Prześlij plik SQL, aby automatycznie wygenerować tabele i kolumny.", "Prześlij plik SQL, aby automatycznie wygenerować tabele i kolumny.",
overwrite_existing_diagram: "Nadpisz istniejący diagram", overwrite_existing_diagram: "Nadpisz istniejący diagram",
@ -239,11 +241,11 @@ const polish = {
share: "Udostępnij", share: "Udostępnij",
copy_link: "Kopiuj link", copy_link: "Kopiuj link",
readme: "README", readme: "README",
failed_to_load: "Nie udało się załadować. Upewnij się, że link jest poprawny.", failed_to_load:
"Nie udało się załadować. Upewnij się, że link jest poprawny.",
share_info: share_info:
"* Udostępnienie tego linku nie utworzy sesji współpracy w czasie rzeczywistym.", "* Udostępnienie tego linku nie utworzy sesji współpracy w czasie rzeczywistym.",
}, },
}; };
export { pl, polish };
export { pl, polish };

View File

@ -7,6 +7,7 @@ const portuguese = {
const pt = { const pt = {
translation: { translation: {
report_bug: "Reportar um erro", report_bug: "Reportar um erro",
import_from: "Importar",
import: "Importar", import: "Importar",
file: "Arquivo", file: "Arquivo",
new: "Novo", new: "Novo",
@ -90,7 +91,8 @@ const pt = {
no_tables: "Sem tabelas", no_tables: "Sem tabelas",
no_tables_text: "Comece a construir seu diagrama!", no_tables_text: "Comece a construir seu diagrama!",
no_relationships: "Sem relacionamentos", no_relationships: "Sem relacionamentos",
no_relationships_text: "Arraste para conectar campos e formar relacionamentos!", no_relationships_text:
"Arraste para conectar campos e formar relacionamentos!",
no_subject_areas: "Sem áreas de assunto", no_subject_areas: "Sem áreas de assunto",
no_subject_areas_text: "Adicione áreas de assunto para agrupar tabelas!", no_subject_areas_text: "Adicione áreas de assunto para agrupar tabelas!",
no_notes: "Sem notas", no_notes: "Sem notas",
@ -149,8 +151,8 @@ const pt = {
create: "Criar", create: "Criar",
confirm: "Confirmar", confirm: "Confirmar",
last_modified: "Última modificação", last_modified: "Última modificação",
drag_and_drop_files: "Arraste e solte o arquivo aqui ou clique para fazer upload.", drag_and_drop_files:
support_json_and_ddb: "Arquivos JSON e DDB são suportados", "Arraste e solte o arquivo aqui ou clique para fazer upload.",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"Faça o upload de um arquivo SQL para gerar automaticamente suas tabelas e colunas.", "Faça o upload de um arquivo SQL para gerar automaticamente suas tabelas e colunas.",
overwrite_existing_diagram: "Substituir diagrama existente", overwrite_existing_diagram: "Substituir diagrama existente",

255
src/i18n/locales/ro.js Normal file
View File

@ -0,0 +1,255 @@
const romanian = {
name: "Romanian",
native_name: "Română",
code: "ro",
};
const ro = {
translation: {
report_bug: "Raportează o eroare",
import_from: "Import",
import: "Import",
file: "Fișier",
new: "Nou",
new_window: "Fereastră nouă",
open: "Deschide",
save: "Salvează",
save_as: "Salvează ca",
save_as_template: "Salvează ca șablon",
template_saved: "Șablon salvat!!",
rename: "Redenumi",
delete_diagram: "Șterge diagramă",
are_you_sure_delete_diagram:
"Ești sigur că vrei să ștergi această diagramă? Această operațiune este ireversibilă.",
oops_smth_went_wrong: "Oops! A apărut o problemă",
import_diagram: "Importă o diagramă",
import_from_source: "Importă din SQL",
export_as: "Exportă ca",
export_source: "Exportă SQL",
models: "Modele",
exit: "Ieșire",
edit: "Editează",
undo: "Anulează",
redo: "Refă",
clear: "Șterge",
are_you_sure_clear:
"Ești sigur că vrei să cureți diagramă? Aceasta operațiune este ireversibilă.",
cut: "Taie",
copy: "Copiază",
paste: "Lipește",
duplicate: "Duplica",
delete: "Șterge",
copy_as_image: "Copiază ca imagine",
view: "Vizualizează",
header: "Bară de meniu",
sidebar: "Bară laterală",
issues: "Probleme",
presentation_mode: "Mod prezentare",
strict_mode: "Mod strict",
field_details: "Detalii câmp",
reset_view: "Resetează vizualizarea",
show_grid: "Arată grilă",
show_cardinality: "Arată cardinalitatea",
theme: "Temă",
light: "Luminos",
dark: "Întunecat",
zoom_in: "Măriți",
zoom_out: "Micșora",
fullscreen: "Ecran complet",
settings: "Setări",
show_timeline: "Arată cronologia",
autosave: "Salvare automată",
panning: "Panoramare",
show_debug_coordinates: "Arată coordonatele de depanare",
transform: "Transformă",
viewbox: "Cutie de vizualizare",
cursor_coordinates: "Coordonate cursorului",
coordinate_space: "Spațiu",
coordinate_space_screen: "Ecran",
coordinate_space_diagram: "Diagramă",
table_width: "Lățimea tabelului",
language: "Limbă",
flush_storage: "Golește depozitorea",
are_you_sure_flush_storage:
"Esti sigur că vrei să golesți depozitorea? Aceasta va șterge ireversibil toate diagramele și modelele personalizate.",
storage_flushed: "Depozitorea a fost golită",
help: "Ajutor",
shortcuts: "Scurtături",
ask_on_discord: "Întrebați-ne pe Discord",
feedback: "Feedback",
no_changes: "Nicio modificare",
loading: "Se încarcă...",
last_saved: "Ultima salvare",
saving: "Se salvează...",
failed_to_save: "Salvarea a eșuat",
fit_window_reset: "Potrivește fereastra / Resetează",
zoom: "Zoom",
add_table: "Adaugă tabel",
add_area: "Adaugă zonă",
add_note: "Adaugă notă",
add_type: "Adaugă tip",
to_do: "De făcut",
tables: "Tabele",
relationships: "Relații",
subject_areas: "Zonă subiectelor",
notes: "Note",
types: "Tipuri",
search: "Căutare...",
no_tables: "Fără tabele",
no_tables_text: "Începe să construiești diagrama!",
no_relationships: "Fără relații",
no_relationships_text: "Trage pentru a conecta câmpuri și a forma relații!",
no_subject_areas: "Fără zone de subiecte",
no_subject_areas_text: "Adaugă zone de subiecte pentru a grupa tabelele!",
no_notes: "Fără note",
no_notes_text:
"Folosește notele pentru a înregistra informații suplimentare",
no_types: "Fără tipuri",
no_types_text: "Creează-ți propriile tipuri de date personalizate",
no_issues: "Nu au fost detectate probleme.",
strict_mode_is_on_no_issues:
"Modul strict este dezactivat, așa că nu vor fi afișate probleme.",
name: "Nume",
type: "Tip",
null: "Null",
not_null: "Nu este null",
primary: "Primar",
unique: "Unic",
autoincrement: "Increment automat",
default_value: "Implicit",
check: "Verifică expresia",
this_will_appear_as_is:
"*Aceasta va apărea așa cum este în scriptul generat.",
comment: "Comentariu",
add_field: "Adaugă câmp",
values: "Valori",
size: "Mărime",
precision: "Precizie",
set_precision: "Setează precizia: 'mărime, cifre'",
use_for_batch_input: "Folosește , pentru input în masă",
indices: "Indici",
add_index: "Adaugă index",
select_fields: "Selectează câmpuri",
title: "Titlu",
not_set: "Necompletat",
foreign: "Străin",
cardinality: "Cardinalitate",
on_update: "La actualizare",
on_delete: "La ștergere",
swap: "Schimbă",
one_to_one: "Unul la unul",
one_to_many: "Unul la mulți",
many_to_one: "Mulți la unul",
content: "Conținut",
types_info:
"Această caracteristică este destinată DBMS-urilor obiect-relaționale precum PostgreSQL.\nDacă este folosită pentru MySQL sau MariaDB, un tip JSON va fi generat cu validarea corespunzătoare a json.\nDacă este folosită pentru SQLite, va fi tradusă într-un BLOB.\nDacă este folosită pentru MSSQL, va fi generat un alias de tip pentru primul câmp.",
table_deleted: "Tabel șters",
area_deleted: "Zonă ștearsă",
note_deleted: "Notă ștearsă",
relationship_deleted: "Relație ștearsă",
type_deleted: "Tip șters",
cannot_connect: "Nu se poate conecta, coloanele au tipuri diferite",
copied_to_clipboard: "Copiat în clipboard",
create_new_diagram: "Creează diagramă nouă",
cancel: "Anulează",
open_diagram: "Deschide diagrama",
rename_diagram: "Redenumește diagrama",
export: "Exportă",
export_image: "Exportă imagine",
create: "Creează",
confirm: "Confirmați",
last_modified: "Ultima modificare",
drag_and_drop_files:
"Trageți și plasați fișierul aici sau faceți clic pentru a încărca.",
upload_sql_to_generate_diagrams:
"Încărcați un fișier SQL pentru a genera automat tabelele și coloanele.",
overwrite_existing_diagram: "Suprascrie diagrama existentă",
only_mysql_supported:
"*Deocamdată, este acceptat doar încărcarea scripturilor MySQL.",
blank: "Gol",
filename: "Nume fișier",
table_w_no_name: "A fost declarat un tabel fără nume",
duplicate_table_by_name: "Tabel duplicat cu numele '{{tableName}}'",
empty_field_name: "Nume câmp gol `nume` în tabelul '{{tableName}}'",
empty_field_type: "Tip câmp gol `tip` în tabelul '{{tableName}}'",
no_values_for_field:
"'{{fieldName}}' câmp din tabelul '{{tableName}}' este de tip `{{type}}` dar nu au fost specificate valori",
default_doesnt_match_type:
"Valoarea implicită pentru câmpul '{{fieldName}}' din tabelul '{{tableName}}' nu se potrivește cu tipul său",
not_null_is_null:
"'{{fieldName}}' câmp din tabelul '{{tableName}}' NU ESTE NULL dar are valoarea implicită NULL",
duplicate_fields:
"Câmpuri duplicate în tabelul '{{tableName}}' cu numele '{{fieldName}}'",
duplicate_index:
"Index duplicat cu numele '{{indexName}}' în tabelul '{{tableName}}'",
empty_index: "Index în tabelul '{{tableName}}' nu indexează nici o coloană",
no_primary_key: "Tabelul '{{tableName}}' nu are cheie primară",
type_with_no_name: "A fost declarat un tip fără nume",
duplicate_types: "Tipuri duplicate cu numele '{{typeName}}'",
type_w_no_fields: "A fost declarat un tip gol '{{typeName}}' fără câmpuri",
empty_type_field_name: "Nume câmp gol `nume` în tipul '{{typeName}}'",
empty_type_field_type: "Tip câmp gol `tip` în tipul '{{typeName}}'",
no_values_for_type_field:
"'{{fieldName}}' câmp din tipul '{{typeName}}' este de tip `{{type}}` dar nu au fost specificate valori",
duplicate_type_fields:
"Câmpuri duplicate în tipul '{{typeName}}' cu numele '{{fieldName}}'",
duplicate_reference: "Referință duplicată cu numele '{{refName}}'",
circular_dependency: "Dependență circulară implicând tabelul '{{refName}}'",
timeline: "Cronologie",
priority: "Prioritate",
none: "Nimic",
low: "Scăzut",
medium: "Mediu",
high: "Ridicat",
sort_by: "Sortează după",
my_order: "Comanda mea",
completed: "Completat",
alphabetically: "Alfabetic",
add_task: "Adaugă sarcină",
details: "Detalii",
no_tasks: "Nu aveți sarcini încă.",
no_activity: "Nu aveți activitate încă.",
move_element: "Mută {{name}} la {{coords}}",
edit_area: "{{extra}} Editează zona {{areaName}}",
delete_area: "Șterge zona {{areaName}}",
edit_note: "{{extra}} Editează nota {{noteTitle}}",
delete_note: "Șterge nota {{noteTitle}}",
edit_table: "{{extra}} Editează tabelul {{tableName}}",
delete_table: "Șterge tabelul {{tableName}}",
edit_type: "{{extra}} Editează tipul {{typeName}}",
delete_type: "Șterge tipul {{typeName}}",
add_relationship: "Adaugă relație",
edit_relationship: "{{extra}} Editează relația {{refName}}",
delete_relationship: "Șterge relația {{refName}}",
not_found: "Nu a fost găsit",
pick_db: "Alege o bază de date",
generic: "General",
generic_description:
"Diagramele generale pot fi exportate în orice tip de SQL, dar susțin câteva tipuri de date.",
enums: "Enumerații",
add_enum: "Adaugă enumerație",
edit_enum: "{{extra}} Editează enumerația {{enumName}}",
delete_enum: "Șterge enumerația",
enum_w_no_name: "Enumerație găsită fără nume",
enum_w_no_values: "Enumerația '{{enumName}}' nu conține valori",
duplicate_enums: "Enumerații duplicate cu numele '{{enumName}}'",
no_enums: "Fără enumerații",
no_enums_text: "Definiți enumerații aici",
declare_array: "Declarați un array",
empty_index_name:
"A fost declarat un index fără nume în tabelul '{{tableName}}'",
didnt_find_diagram: "Oops! Nu am găsit diagrama.",
unsigned: "Fără semn",
share: "Împărtășește",
unshare: "Nu mai împărtăși",
copy_link: "Copiază linkul",
readme: "README",
failed_to_load: "Eșec la încărcare. Asigurați-vă că linkul este corect.",
share_info:
"*Împărtășirea acestui link nu va crea o sesiune de colaborare în timp real.",
show_relationship_labels: "Arată etichetele relațiilor",
docs: "Documentație",
},
};
export { ro, romanian };

View File

@ -7,6 +7,7 @@ const russian = {
const ru = { const ru = {
translation: { translation: {
report_bug: "Сообщить об ошибке", report_bug: "Сообщить об ошибке",
import_from: "Импорт",
import: "Импорт", import: "Импорт",
file: "Файл", file: "Файл",
new: "Новый", new: "Новый",
@ -90,9 +91,11 @@ const ru = {
no_tables: "Нет таблиц", no_tables: "Нет таблиц",
no_tables_text: "Начните создавать свою диаграмму!", no_tables_text: "Начните создавать свою диаграмму!",
no_relationships: "Нет отношений", no_relationships: "Нет отношений",
no_relationships_text: "Перетащите, чтобы соединить поля и формировать отношения!", no_relationships_text:
"Перетащите, чтобы соединить поля и формировать отношения!",
no_subject_areas: "Нет предметных областей", no_subject_areas: "Нет предметных областей",
no_subject_areas_text: "Добавьте предметные области для группировки таблиц!", no_subject_areas_text:
"Добавьте предметные области для группировки таблиц!",
no_notes: "Нет заметок", no_notes: "Нет заметок",
no_notes_text: "Используйте заметки для записи дополнительной информации", no_notes_text: "Используйте заметки для записи дополнительной информации",
no_types: "Нет типов", no_types: "Нет типов",
@ -109,7 +112,8 @@ const ru = {
autoincrement: "Автоувеличение", autoincrement: "Автоувеличение",
default_value: "Значение по умолчанию", default_value: "Значение по умолчанию",
check: "Проверка выражения", check: "Проверка выражения",
this_will_appear_as_is: "*Это будет отображаться в сгенерированном скрипте как есть.", this_will_appear_as_is:
"*Это будет отображаться в сгенерированном скрипте как есть.",
comment: "Комментарий", comment: "Комментарий",
add_field: "Добавить поле", add_field: "Добавить поле",
values: "значения", values: "значения",
@ -150,7 +154,6 @@ const ru = {
confirm: "Подтвердить", confirm: "Подтвердить",
last_modified: "Последнее изменение", last_modified: "Последнее изменение",
drag_and_drop_files: "Перетащите файл сюда или нажмите, чтобы загрузить.", drag_and_drop_files: "Перетащите файл сюда или нажмите, чтобы загрузить.",
support_json_and_ddb: "Поддерживаются файлы JSON и DDB",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"Загрузите файл sql для автогенерации ваших таблиц и колонок.", "Загрузите файл sql для автогенерации ваших таблиц и колонок.",
overwrite_existing_diagram: "Перезаписать существующую диаграмму", overwrite_existing_diagram: "Перезаписать существующую диаграмму",
@ -184,7 +187,8 @@ const ru = {
duplicate_type_fields: duplicate_type_fields:
"Дублирование полей типа по имени '{{fieldName}}' в типе '{{typeName}}'", "Дублирование полей типа по имени '{{fieldName}}' в типе '{{typeName}}'",
duplicate_reference: "Дублирование ссылки по имени '{{refName}}'", duplicate_reference: "Дублирование ссылки по имени '{{refName}}'",
circular_dependency: "Циклическая зависимость, вовлекающая таблицу '{{refName}}'", circular_dependency:
"Циклическая зависимость, вовлекающая таблицу '{{refName}}'",
timeline: "Временная шкала", timeline: "Временная шкала",
priority: "Приоритет", priority: "Приоритет",
none: "Нет", none: "Нет",
@ -221,7 +225,8 @@ const ru = {
edit_enum: "{{extra}} Изменить перечисление {{enumName}}", edit_enum: "{{extra}} Изменить перечисление {{enumName}}",
delete_enum: "Удалить перечисление", delete_enum: "Удалить перечисление",
enum_w_no_name: "Найдено перечисление без имени", enum_w_no_name: "Найдено перечисление без имени",
enum_w_no_values: "Найдено перечисление '{{enumName}}' без каких-либо значений", enum_w_no_values:
"Найдено перечисление '{{enumName}}' без каких-либо значений",
duplicate_enums: "Повторяющиеся перечисления с именем '{{enumName}}'", duplicate_enums: "Повторяющиеся перечисления с именем '{{enumName}}'",
no_enums: "Никаких перечислений", no_enums: "Никаких перечислений",
no_enums_text: "Определите перечисления здесь", no_enums_text: "Определите перечисления здесь",
@ -233,7 +238,8 @@ const ru = {
unshare: "Не делиться", unshare: "Не делиться",
copy_link: "Скопировать ссылку", copy_link: "Скопировать ссылку",
readme: "README", readme: "README",
failed_to_load: "Не удалось загрузить. Убедитесь, что ссылка указана правильно.", failed_to_load:
"Не удалось загрузить. Убедитесь, что ссылка указана правильно.",
share_info: share_info:
"* Поделившись этой ссылкой, не будет создано сеанса совместной работы в режиме реального времени.", "* Поделившись этой ссылкой, не будет создано сеанса совместной работы в режиме реального времени.",
}, },

View File

@ -7,6 +7,7 @@ const swedish = {
const sv = { const sv = {
translation: { translation: {
report_bug: "Rapportera ett fel", report_bug: "Rapportera ett fel",
import_from: "Importera",
import: "Importera", import: "Importera",
file: "Fil", file: "Fil",
new: "Ny", new: "Ny",
@ -159,7 +160,6 @@ const sv = {
last_modified: "Senast ändrad", last_modified: "Senast ändrad",
drag_and_drop_files: drag_and_drop_files:
"Dra och släpp filen här eller klicka för att ladda upp.", "Dra och släpp filen här eller klicka för att ladda upp.",
support_json_and_ddb: "JSON- och DDB-filer stöds",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"Ladda upp en SQL-fil för att auto-generera dina tabeller och kolumner.", "Ladda upp en SQL-fil för att auto-generera dina tabeller och kolumner.",
overwrite_existing_diagram: "Skriv över befintligt diagram", overwrite_existing_diagram: "Skriv över befintligt diagram",

View File

@ -2,11 +2,12 @@ const telugu = {
name: "Telugu", name: "Telugu",
native_name: "తెలుగు", native_name: "తెలుగు",
code: "te", code: "te",
}; };
const te = { const te = {
translation: { translation: {
report_bug: "బగ్ నివేదించండి", report_bug: "బగ్ నివేదించండి",
import_from: "దిగుమతి",
import: "దిగుమతి", import: "దిగుమతి",
file: "ఫైల్", file: "ఫైల్",
new: "క్రొత్త", new: "క్రొత్త",
@ -90,7 +91,8 @@ const telugu = {
no_tables: "ఏ పట్టికలు లేవు", no_tables: "ఏ పట్టికలు లేవు",
no_tables_text: "మీ డయాగ్రామ్ ను ప్రారంభించండి!", no_tables_text: "మీ డయాగ్రామ్ ను ప్రారంభించండి!",
no_relationships: "ఏ సంబంధాలు లేవు", no_relationships: "ఏ సంబంధాలు లేవు",
no_relationships_text: "ఫీల్డ్స్ కలుపుకోవడానికి డ్రాగ్ చేసి సంబంధం ఏర్పాటు చేయండి!", no_relationships_text:
"ఫీల్డ్స్ కలుపుకోవడానికి డ్రాగ్ చేసి సంబంధం ఏర్పాటు చేయండి!",
no_subject_areas: "ఏ విషయ ప్రాంతాలు లేవు", no_subject_areas: "ఏ విషయ ప్రాంతాలు లేవు",
no_subject_areas_text: "పట్టికలను సమూహంగా సబ్జెక్ట్ ప్రాంతాలకు చేర్చండి!", no_subject_areas_text: "పట్టికలను సమూహంగా సబ్జెక్ట్ ప్రాంతాలకు చేర్చండి!",
no_notes: "ఏ గమనికలు లేవు", no_notes: "ఏ గమనికలు లేవు",
@ -109,7 +111,8 @@ const telugu = {
autoincrement: "స్వీయ వృద్ధి", autoincrement: "స్వీయ వృద్ధి",
default_value: "మూల్యాన్ని అప్రమేయంగా చేయి", default_value: "మూల్యాన్ని అప్రమేయంగా చేయి",
check: "తనిఖీ", check: "తనిఖీ",
this_will_appear_as_is: "*ఇది ఉత్పత్తి చేయబడిన స్క్రిప్ట్‌లో వంటి ప్రదర్శితం అవుతుంది.", this_will_appear_as_is:
"*ఇది ఉత్పత్తి చేయబడిన స్క్రిప్ట్‌లో వంటి ప్రదర్శితం అవుతుంది.",
comment: "వ్యాఖ్య", comment: "వ్యాఖ్య",
add_field: "ఫీల్డ్ చేర్చండి", add_field: "ఫీల్డ్ చేర్చండి",
values: "విలువలు", values: "విలువలు",
@ -149,11 +152,12 @@ const telugu = {
create: "సృష్టించండి", create: "సృష్టించండి",
confirm: "నిర్ధారించండి", confirm: "నిర్ధారించండి",
last_modified: "చివరిగా సవరించబడింది", last_modified: "చివరిగా సవరించబడింది",
drag_and_drop_files: "ఫైల్స్‌ను ఇక్కడికి లాగి వదిలివేయండి లేదా అప్‌లోడ్ చేయడానికి క్లిక్ చేయండి.", drag_and_drop_files:
support_json_and_ddb: "JSON మరియు DDB ఫైల్స్ మద్దతు", "ఫైల్స్‌ను ఇక్కడికి లాగి వదిలివేయండి లేదా అప్‌లోడ్ చేయడానికి క్లిక్ చేయండి.",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"మీ టేబుల్ మరియు కాలమ్స్‌ను స్వయంచాలకంగా ఉత్పత్తి చేయడానికి SQL ఫైల్‌ను అప్‌లోడ్ చేయండి.", "మీ టేబుల్ మరియు కాలమ్స్‌ను స్వయంచాలకంగా ఉత్పత్తి చేయడానికి SQL ఫైల్‌ను అప్‌లోడ్ చేయండి.",
overwrite_existing_diagram: "అన్నిప్రతుల మునుపటి ఆర్కెంట్ అంబి అవరు ఆర్కెదాన్ని చర్", overwrite_existing_diagram:
"అన్నిప్రతుల మునుపటి ఆర్కెంట్ అంబి అవరు ఆర్కెదాన్ని చర్",
only_mysql_supported: only_mysql_supported:
"*ప్రస్తుతం MySQL స్క్రిప్ట్స్ మాత్రమే లోడ్ చేయడానికి మద్దతు ఉంది.", "*ప్రస్తుతం MySQL స్క్రిప్ట్స్ మాత్రమే లోడ్ చేయడానికి మద్దతు ఉంది.",
blank: "ఖాళీ", blank: "ఖాళీ",
@ -213,6 +217,6 @@ const telugu = {
delete_relationship: "సంబంధం తొలగించండి {{refName}}", delete_relationship: "సంబంధం తొలగించండి {{refName}}",
not_found: "దొరకలేదు", not_found: "దొరకలేదు",
}, },
}; };
export { te, telugu }; export { te, telugu };

View File

@ -2,11 +2,12 @@ const tamil = {
name: "Tamil", name: "Tamil",
native_name: "தமிழ்", native_name: "தமிழ்",
code: "tm", code: "tm",
}; };
const tm = { const tm = {
translation: { translation: {
report_bug: "பிழையைப் புகாரளிக்கவும்", report_bug: "பிழையைப் புகாரளிக்கவும்",
import_from: "இறக்குமதி",
import: "இறக்குமதி", import: "இறக்குமதி",
file: "கோப்பு", file: "கோப்பு",
new: "புதியது", new: "புதியது",
@ -18,7 +19,8 @@ const tamil = {
template_saved: "வார்ப்புரை சேமிக்கப்பட்டது!", template_saved: "வார்ப்புரை சேமிக்கப்பட்டது!",
rename: "பெயர் மாற்ற", rename: "பெயர் மாற்ற",
delete_diagram: "வரைவைப் அழிக்க", delete_diagram: "வரைவைப் அழிக்க",
are_you_sure_delete_diagram: "இந்த வரைவைக் கணியலை நீக்க விரும்புகிறீர்களா? இந்த செயல்பாடு மாற்றமுடியாதது.", are_you_sure_delete_diagram:
"இந்த வரைவைக் கணியலை நீக்க விரும்புகிறீர்களா? இந்த செயல்பாடு மாற்றமுடியாதது.",
oops_smth_went_wrong: "ஓப்பஸ்! ஏதோ தவறானது.", oops_smth_went_wrong: "ஓப்பஸ்! ஏதோ தவறானது.",
import_diagram: "வரைவைக் கணியம் செய்ய", import_diagram: "வரைவைக் கணியம் செய்ய",
import_from_source: "SQL-இலிருந்து இறக்குமதி செய்ய", import_from_source: "SQL-இலிருந்து இறக்குமதி செய்ய",
@ -30,7 +32,8 @@ const tamil = {
undo: "திரும்பெடு", undo: "திரும்பெடு",
redo: "மீண்டும் செய்", redo: "மீண்டும் செய்",
clear: "அழிக்க", clear: "அழிக்க",
are_you_sure_clear: "இந்த வரைவைக் கணியலை அகற்ற விரும்புகிறீர்களா? இது மாற்றமுடியாதது.", are_you_sure_clear:
"இந்த வரைவைக் கணியலை அகற்ற விரும்புகிறீர்களா? இது மாற்றமுடியாதது.",
cut: "வெட்டு", cut: "வெட்டு",
copy: "நகலெடு", copy: "நகலெடு",
paste: "ஒட்டு", paste: "ஒட்டு",
@ -67,7 +70,8 @@ const tamil = {
table_width: "அட்டவணை அகலம்", table_width: "அட்டவணை அகலம்",
language: "மொழி", language: "மொழி",
flush_storage: "சேமிப்பை கழிக்க", flush_storage: "சேமிப்பை கழிக்க",
are_you_sure_flush_storage: "சேமிப்பை அழிக்க விரும்புகிறீர்களா? இது உங்கள் அனைத்து வரைவுகளையும் தனிப்பயனாக்கிய வார்ப்புருக்களை நீக்கும்.", are_you_sure_flush_storage:
"சேமிப்பை அழிக்க விரும்புகிறீர்களா? இது உங்கள் அனைத்து வரைவுகளையும் தனிப்பயனாக்கிய வார்ப்புருக்களை நீக்கும்.",
storage_flushed: "சேமிப்பு கழிக்கப்பட்டது", storage_flushed: "சேமிப்பு கழிக்கப்பட்டது",
help: "உதவி", help: "உதவி",
shortcuts: "குறுக்குவழிகள்", shortcuts: "குறுக்குவழிகள்",
@ -94,15 +98,18 @@ const tamil = {
no_tables: "அட்டவணைகள் இல்லை", no_tables: "அட்டவணைகள் இல்லை",
no_tables_text: "உங்கள் வரைவைக் கணியம் தொடங்குங்கள்!", no_tables_text: "உங்கள் வரைவைக் கணியம் தொடங்குங்கள்!",
no_relationships: "தொடர்புகள் இல்லை", no_relationships: "தொடர்புகள் இல்லை",
no_relationships_text: "புலங்களை இணைக்க இழுத்து விடுங்கள் மற்றும் தொடர்புகளை உருவாக்குங்கள்!", no_relationships_text:
"புலங்களை இணைக்க இழுத்து விடுங்கள் மற்றும் தொடர்புகளை உருவாக்குங்கள்!",
no_subject_areas: "பொருள் பகுதிகள் இல்லை", no_subject_areas: "பொருள் பகுதிகள் இல்லை",
no_subject_areas_text: "அட்டவணைகளை குழுவாகச் சேர்க்க பொருள் பகுதிகளைச் சேர்க்கவும்!", no_subject_areas_text:
"அட்டவணைகளை குழுவாகச் சேர்க்க பொருள் பகுதிகளைச் சேர்க்கவும்!",
no_notes: "குறிப்புகள் இல்லை", no_notes: "குறிப்புகள் இல்லை",
no_notes_text: "கூடுதல் தகவலைப் பதிவு செய்ய குறிப்புகளைப் பயன்படுத்துங்கள்", no_notes_text: "கூடுதல் தகவலைப் பதிவு செய்ய குறிப்புகளைப் பயன்படுத்துங்கள்",
no_types: "வகைகள் இல்லை", no_types: "வகைகள் இல்லை",
no_types_text: "உங்கள் சொந்த தனிப்பயன் தரவுப் வகைகளை உருவாக்குங்கள்", no_types_text: "உங்கள் சொந்த தனிப்பயன் தரவுப் வகைகளை உருவாக்குங்கள்",
no_issues: "சிக்கல்கள் கண்டுபிடிக்கவில்லை.", no_issues: "சிக்கல்கள் கண்டுபிடிக்கவில்லை.",
strict_mode_is_on_no_issues: "கடுமையான முறை அணைக்கப்பட்டுள்ளது எனவே சிக்கல்கள் காண்பிக்கப்படாது.", strict_mode_is_on_no_issues:
"கடுமையான முறை அணைக்கப்பட்டுள்ளது எனவே சிக்கல்கள் காண்பிக்கப்படாது.",
name: "பெயர்", name: "பெயர்",
type: "வகை", type: "வகை",
null: "சுழி", null: "சுழி",
@ -112,7 +119,8 @@ const tamil = {
autoincrement: "தானியங்கி அதிகரிப்பு", autoincrement: "தானியங்கி அதிகரிப்பு",
default_value: "இயல்புநிலை", default_value: "இயல்புநிலை",
check: "சரிபார்", check: "சரிபார்",
this_will_appear_as_is: "*இது உருவாக்கப்பட்ட ஸ்கிரிப்டில் உள்ளபடியே தோன்றும்.", this_will_appear_as_is:
"*இது உருவாக்கப்பட்ட ஸ்கிரிப்டில் உள்ளபடியே தோன்றும்.",
comment: "கருத்து", comment: "கருத்து",
add_field: "புலம் சேர்க்க", add_field: "புலம் சேர்க்க",
values: "மதிப்புகள்", values: "மதிப்புகள்",
@ -134,7 +142,8 @@ const tamil = {
one_to_many: "ஒன்றுக்கு பல", one_to_many: "ஒன்றுக்கு பல",
many_to_one: "பலக்கு ஒன்று", many_to_one: "பலக்கு ஒன்று",
content: "உள்ளடக்கம்", content: "உள்ளடக்கம்",
types_info: "இந்த அம்சம் PostgreSQL போன்ற பொருள் தொடர்புடைய DBMS-களுக்காகவே. MySQL அல்லது MariaDB க்கு பயன்படுத்தப்படும் போது JSON வகை உருவாக்கப்படும் அதற்கான json சரிபார்ப்பு ஆய்வுடன். SQLite க்கு பயன்படுத்தப்படும் போது இது BLOB ஆக மாற்றப்படும். MSSQL க்கு பயன்படுத்தப்படும் போது முதற்கொண்டு கணியலுக்கு ஒரே வகை மாற்றம் உருவாக்கப்படும்.", types_info:
"இந்த அம்சம் PostgreSQL போன்ற பொருள் தொடர்புடைய DBMS-களுக்காகவே. MySQL அல்லது MariaDB க்கு பயன்படுத்தப்படும் போது JSON வகை உருவாக்கப்படும் அதற்கான json சரிபார்ப்பு ஆய்வுடன். SQLite க்கு பயன்படுத்தப்படும் போது இது BLOB ஆக மாற்றப்படும். MSSQL க்கு பயன்படுத்தப்படும் போது முதற்கொண்டு கணியலுக்கு ஒரே வகை மாற்றம் உருவாக்கப்படும்.",
table_deleted: "அட்டவணை அழிக்கப்பட்டது", table_deleted: "அட்டவணை அழிக்கப்பட்டது",
area_deleted: "பகுதி அழிக்கப்பட்டது", area_deleted: "பகுதி அழிக்கப்பட்டது",
note_deleted: "குறிப்பு அழிக்கப்பட்டது", note_deleted: "குறிப்பு அழிக்கப்பட்டது",
@ -151,31 +160,46 @@ const tamil = {
create: "உருவாக்கு", create: "உருவாக்கு",
confirm: "உறுதிப்படுத்து", confirm: "உறுதிப்படுத்து",
last_modified: "கடைசியாக மாற்றப்பட்டது", last_modified: "கடைசியாக மாற்றப்பட்டது",
drag_and_drop_files: "கோப்புகளை இங்கு இழுத்து விடவும் அல்லது கிளிக்கி பதிவேற்றவும்.", drag_and_drop_files:
support_json_and_ddb: "JSON மற்றும் DDB கோப்புகள் ஆதரிக்கப்படுகின்றன", "கோப்புகளை இங்கு இழுத்து விடவும் அல்லது கிளிக்கி பதிவேற்றவும்.",
upload_sql_to_generate_diagrams: "sql கோப்பை பதிவேற்றம் செய்து உங்கள் அட்டவணைகளையும் புலங்களையும் தானாக உருவாக்குங்கள்.", upload_sql_to_generate_diagrams:
"sql கோப்பை பதிவேற்றம் செய்து உங்கள் அட்டவணைகளையும் புலங்களையும் தானாக உருவாக்குங்கள்.",
overwrite_existing_diagram: "ஏற்கனவே உள்ள வரைவைக் கணியலை மீட்டமைக்க", overwrite_existing_diagram: "ஏற்கனவே உள்ள வரைவைக் கணியலை மீட்டமைக்க",
only_mysql_supported: "*தற்காலிகமாக மட்டும் MySQL ஸ்கிரிப்ட்கள் மட்டுமே ஆதரிக்கப்படும்.", only_mysql_supported:
"*தற்காலிகமாக மட்டும் MySQL ஸ்கிரிப்ட்கள் மட்டுமே ஆதரிக்கப்படும்.",
blank: "வெற்று", blank: "வெற்று",
filename: "கோப்புப்பெயர்", filename: "கோப்புப்பெயர்",
table_w_no_name: "பெயர் இல்லாத அட்டவணை அறிவிக்கப்பட்டது", table_w_no_name: "பெயர் இல்லாத அட்டவணை அறிவிக்கப்பட்டது",
duplicate_table_by_name: "'{{tableName}}' என்ற பெயரில் நகல் அட்டவணை", duplicate_table_by_name: "'{{tableName}}' என்ற பெயரில் நகல் அட்டவணை",
empty_field_name: "'{{tableName}}' அட்டவணையில் `name` புலம் வெறுமையாக உள்ளது", empty_field_name:
empty_field_type: "'{{tableName}}' அட்டவணையில் `type` புலம் வெறுமையாக உள்ளது", "'{{tableName}}' அட்டவணையில் `name` புலம் வெறுமையாக உள்ளது",
no_values_for_field: "'{{tableName}}' அட்டவணையில் '{{fieldName}}' புலம் `{{type}}` வகையில் உள்ளது ஆனால் மதிப்புகள் குறிப்பிடப்படவில்லை", empty_field_type:
default_doesnt_match_type: "'{{tableName}}' அட்டவணையில் '{{fieldName}}' புலத்திற்கு இயல்புநிலை மதிப்பு அதன் வகையுடன் பொருந்தவில்லை", "'{{tableName}}' அட்டவணையில் `type` புலம் வெறுமையாக உள்ளது",
not_null_is_null: "'{{tableName}}' அட்டவணையில் '{{fieldName}}' புலம் சுழியல்ல ஆனால் இயல்புநிலை சுழி உள்ளது", no_values_for_field:
duplicate_fields: "'{{tableName}}' அட்டவணையில் '{{fieldName}}' என்ற பெயரில் நகல் புலங்கள்", "'{{tableName}}' அட்டவணையில் '{{fieldName}}' புலம் `{{type}}` வகையில் உள்ளது ஆனால் மதிப்புகள் குறிப்பிடப்படவில்லை",
duplicate_index: "'{{tableName}}' அட்டவணையில் '{{indexName}}' என்ற பெயரில் நகல் சுட்டி", default_doesnt_match_type:
empty_index: "'{{tableName}}' அட்டவணையில் சுட்டி எந்த புலங்களையும் குறிப்பிடவில்லை", "'{{tableName}}' அட்டவணையில் '{{fieldName}}' புலத்திற்கு இயல்புநிலை மதிப்பு அதன் வகையுடன் பொருந்தவில்லை",
not_null_is_null:
"'{{tableName}}' அட்டவணையில் '{{fieldName}}' புலம் சுழியல்ல ஆனால் இயல்புநிலை சுழி உள்ளது",
duplicate_fields:
"'{{tableName}}' அட்டவணையில் '{{fieldName}}' என்ற பெயரில் நகல் புலங்கள்",
duplicate_index:
"'{{tableName}}' அட்டவணையில் '{{indexName}}' என்ற பெயரில் நகல் சுட்டி",
empty_index:
"'{{tableName}}' அட்டவணையில் சுட்டி எந்த புலங்களையும் குறிப்பிடவில்லை",
no_primary_key: "'{{tableName}}' அட்டவணையில் முதன்மை விசை இல்லை", no_primary_key: "'{{tableName}}' அட்டவணையில் முதன்மை விசை இல்லை",
type_with_no_name: "பெயர் இல்லாத வகை அறிவிக்கப்பட்டது", type_with_no_name: "பெயர் இல்லாத வகை அறிவிக்கப்பட்டது",
duplicate_types: "'{{typeName}}' என்ற பெயரில் நகல் வகைகள்", duplicate_types: "'{{typeName}}' என்ற பெயரில் நகல் வகைகள்",
type_w_no_fields: "'{{typeName}}' என்ற பெயரில் வெறுமையான வகை அறிவிக்கப்பட்டது", type_w_no_fields:
empty_type_field_name: "'{{typeName}}' வகையில் `name` புலம் வெறுமையாக உள்ளது", "'{{typeName}}' என்ற பெயரில் வெறுமையான வகை அறிவிக்கப்பட்டது",
empty_type_field_type: "'{{typeName}}' வகையில் `type` புலம் வெறுமையாக உள்ளது", empty_type_field_name:
no_values_for_type_field: "'{{typeName}}' வகையில் '{{fieldName}}' புலம் `{{type}}` வகையில் உள்ளது ஆனால் மதிப்புகள் குறிப்பிடப்படவில்லை", "'{{typeName}}' வகையில் `name` புலம் வெறுமையாக உள்ளது",
duplicate_type_fields: "'{{typeName}}' வகையில் '{{fieldName}}' என்ற பெயரில் நகல் புலங்கள்", empty_type_field_type:
"'{{typeName}}' வகையில் `type` புலம் வெறுமையாக உள்ளது",
no_values_for_type_field:
"'{{typeName}}' வகையில் '{{fieldName}}' புலம் `{{type}}` வகையில் உள்ளது ஆனால் மதிப்புகள் குறிப்பிடப்படவில்லை",
duplicate_type_fields:
"'{{typeName}}' வகையில் '{{fieldName}}' என்ற பெயரில் நகல் புலங்கள்",
duplicate_reference: "'{{refName}}' என்ற பெயரில் நகல் குறிப்பு", duplicate_reference: "'{{refName}}' என்ற பெயரில் நகல் குறிப்பு",
circular_dependency: "'{{refName}}' அட்டவணை குறித்த சுழற்சி சார்பு", circular_dependency: "'{{refName}}' அட்டவணை குறித்த சுழற்சி சார்பு",
timeline: "நேரவரிசை", timeline: "நேரவரிசை",
@ -207,7 +231,8 @@ const tamil = {
not_found: "கண்டுபிடிக்கவில்லை", not_found: "கண்டுபிடிக்கவில்லை",
pick_db: "தரவுத்தொகுப்பைத் தேர்ந்தெடு", pick_db: "தரவுத்தொகுப்பைத் தேர்ந்தெடு",
generic: "பொது", generic: "பொது",
generic_description: "பொது வரைவை எந்த SQL வகைக்கும் ஏற்றexport செய்யலாம், ஆனால் சில தரவுவகைகளை மட்டுமே ஆதரிக்கும்.", generic_description:
"பொது வரைவை எந்த SQL வகைக்கும் ஏற்றexport செய்யலாம், ஆனால் சில தரவுவகைகளை மட்டுமே ஆதரிக்கும்.",
enums: "எனம்கள்", enums: "எனம்கள்",
add_enum: "எனத்தைச் சேர்க்க", add_enum: "எனத்தைச் சேர்க்க",
edit_enum: "{{extra}} எனத்தைத் திருத்து {{enumName}}", edit_enum: "{{extra}} எனத்தைத் திருத்து {{enumName}}",
@ -218,11 +243,10 @@ const tamil = {
no_enums: "எனங்கள் இல்லை", no_enums: "எனங்கள் இல்லை",
no_enums_text: "இங்கே எனங்களை வரையறுக்கவும்", no_enums_text: "இங்கே எனங்களை வரையறுக்கவும்",
declare_array: "வரிசையாக அறிவி", declare_array: "வரிசையாக அறிவி",
empty_index_name: "'{{tableName}}' அட்டவணையில் பெயர் இல்லாத சுட்டி அறிவிக்கப்பட்டது", empty_index_name:
"'{{tableName}}' அட்டவணையில் பெயர் இல்லாத சுட்டி அறிவிக்கப்பட்டது",
didnt_find_diagram: "ஓப்பஸ்! வரைவை கண்டுபிடிக்க முடியவில்லை.", didnt_find_diagram: "ஓப்பஸ்! வரைவை கண்டுபிடிக்க முடியவில்லை.",
}, },
}; };
export { tm, tamil };
export { tm, tamil };

View File

@ -7,6 +7,7 @@ const turkish = {
const tr = { const tr = {
translation: { translation: {
report_bug: "Hata bildir", report_bug: "Hata bildir",
import_from: "İçe aktar",
import: "İçe aktar", import: "İçe aktar",
file: "Dosya", file: "Dosya",
new: "Yeni", new: "Yeni",
@ -97,7 +98,8 @@ const tr = {
no_tables: "Tablo yok", no_tables: "Tablo yok",
no_tables_text: "Diagram oluşturmaya başlayın", no_tables_text: "Diagram oluşturmaya başlayın",
no_relationships: "İlişki yok", no_relationships: "İlişki yok",
no_relationships_text: "Alanları bağlamak ve ilişkiler oluşturmak için sürükleyin", no_relationships_text:
"Alanları bağlamak ve ilişkiler oluşturmak için sürükleyin",
no_subject_areas: "Konu alanı yok", no_subject_areas: "Konu alanı yok",
no_subject_areas_text: "Grup tablolarına konu alanları ekleyin!", no_subject_areas_text: "Grup tablolarına konu alanları ekleyin!",
no_notes: "Not yok", no_notes: "Not yok",
@ -105,8 +107,7 @@ const tr = {
no_types: "Tip yok", no_types: "Tip yok",
no_types_text: "Kendi özel veri türlerinizi tanımlayın", no_types_text: "Kendi özel veri türlerinizi tanımlayın",
no_issues: "Hiçbir sorun bulunamadı", no_issues: "Hiçbir sorun bulunamadı",
strict_mode_is_on_no_issues: strict_mode_is_on_no_issues: "Sabit mod açık iken hatalar görüntülenmez",
"Sabit mod açık iken hatalar görüntülenmez",
name: "", name: "",
type: "Tip", type: "Tip",
null: "Boş", null: "Boş",
@ -138,7 +139,8 @@ const tr = {
one_to_many: "Bire çok", one_to_many: "Bire çok",
many_to_one: "Çoktan bire", many_to_one: "Çoktan bire",
content: "İçerik", content: "İçerik",
types_info:"Bu özellik PostgreSQL gibi nesne-ilişkisel DBMS'ler içindir.\nMySQL veya MariaDB için kullanılırsa, ilgili json doğrulama kontrolüyle birlikte bir JSON türü oluşturulacaktır.\nSQLite için kullanılırsa, bir BLOB'a çevrilecektir.\nMSQL için kullanılırsa, ilk alana bir tür takma adı oluşturulacaktır.", types_info:
"Bu özellik PostgreSQL gibi nesne-ilişkisel DBMS'ler içindir.\nMySQL veya MariaDB için kullanılırsa, ilgili json doğrulama kontrolüyle birlikte bir JSON türü oluşturulacaktır.\nSQLite için kullanılırsa, bir BLOB'a çevrilecektir.\nMSQL için kullanılırsa, ilk alana bir tür takma adı oluşturulacaktır.",
table_deleted: "Tablo silindi", table_deleted: "Tablo silindi",
area_deleted: "Alan silindi", area_deleted: "Alan silindi",
note_deleted: "Not silindi", note_deleted: "Not silindi",
@ -155,8 +157,8 @@ const tr = {
create: "Oluştur", create: "Oluştur",
confirm: "Onayla", confirm: "Onayla",
last_modified: "Son değişiklik", last_modified: "Son değişiklik",
drag_and_drop_files: "Dosyayı buraya sürükleyip bırakın veya yüklemek için tıklayın.", drag_and_drop_files:
support_json_and_ddb: "JSON ve DDB dosya türleri desteklenir", "Dosyayı buraya sürükleyip bırakın veya yüklemek için tıklayın.",
upload_sql_to_generate_diagrams: upload_sql_to_generate_diagrams:
"Tablolarınızı ve sütunlarınızı otomatik olarak oluşturmak için bir sql dosyası yükleyin.", "Tablolarınızı ve sütunlarınızı otomatik olarak oluşturmak için bir sql dosyası yükleyin.",
overwrite_existing_diagram: "Mevcut diyagramı üzerine yaz", overwrite_existing_diagram: "Mevcut diyagramı üzerine yaz",
@ -168,20 +170,28 @@ const tr = {
duplicate_table_by_name: "Tekrar eden tablo adı '{{tableName}}'", duplicate_table_by_name: "Tekrar eden tablo adı '{{tableName}}'",
empty_field_name: "'{{tableName}} tablosunda boş alan `name`", empty_field_name: "'{{tableName}} tablosunda boş alan `name`",
empty_field_type: "'{{tableName}} tablosunda boş tip `type`", empty_field_type: "'{{tableName}} tablosunda boş tip `type`",
no_values_for_field:"'{{tableName}}' tablosunun '{{fieldName}}' alanı `{{type}}` türündedir ancak hiçbir değer belirtilmemiştir", no_values_for_field:
default_doesnt_match_type:"{{tableName}} tablosundaki '{{fieldName}}' alanı için varsayılan değer türüyle eşleşmiyor", "'{{tableName}}' tablosunun '{{fieldName}}' alanı `{{type}}` türündedir ancak hiçbir değer belirtilmemiştir",
not_null_is_null:"'{{tableName}}' tablosunun '{{fieldName}}' alanı NULL DEĞİL ancak varsayılan olarak NULL", default_doesnt_match_type:
duplicate_fields:"Tablo '{{tableName}}' içinde '{{fieldName}}' adıyla yinelenen tablo alanları", "{{tableName}} tablosundaki '{{fieldName}}' alanı için varsayılan değer türüyle eşleşmiyor",
duplicate_index: "'{{tableName}}' tablosunda '{{indexName}}' adına göre yinelenen dizin", not_null_is_null:
empty_index: "'{{tableName}}' tablosundaki dizin hiçbir sütunu indexlemiyor", "'{{tableName}}' tablosunun '{{fieldName}}' alanı NULL DEĞİL ancak varsayılan olarak NULL",
duplicate_fields:
"Tablo '{{tableName}}' içinde '{{fieldName}}' adıyla yinelenen tablo alanları",
duplicate_index:
"'{{tableName}}' tablosunda '{{indexName}}' adına göre yinelenen dizin",
empty_index:
"'{{tableName}}' tablosundaki dizin hiçbir sütunu indexlemiyor",
no_primary_key: "'{{tableName}} tablosunun birincil anahtarı yok", no_primary_key: "'{{tableName}} tablosunun birincil anahtarı yok",
type_with_no_name: "Adı olmayan bir tür bildirilmiş", type_with_no_name: "Adı olmayan bir tür bildirilmiş",
duplicate_types: "'{{typeName}}' adına göre yinelenen türler", duplicate_types: "'{{typeName}}' adına göre yinelenen türler",
type_w_no_fields: "Alanı olmayan boş bir '{{typeName}}' türü bildirilmiş", type_w_no_fields: "Alanı olmayan boş bir '{{typeName}}' türü bildirilmiş",
empty_type_field_name: "Boş alan `name` in type '{{typeName}}'", empty_type_field_name: "Boş alan `name` in type '{{typeName}}'",
empty_type_field_type: "Boş alan `type` '{{typeName}}' türünde", empty_type_field_type: "Boş alan `type` '{{typeName}}' türünde",
no_values_for_type_field:"'{{typeName}}' türündeki '{{fieldName}}' alanı `{{type}}` türündedir ancak hiçbir değer belirtilmemiştir", no_values_for_type_field:
duplicate_type_fields:"'{{typeName}}' türünde '{{fieldName}}' adına göre yinelenen tür alanları", "'{{typeName}}' türündeki '{{fieldName}}' alanı `{{type}}` türündedir ancak hiçbir değer belirtilmemiştir",
duplicate_type_fields:
"'{{typeName}}' türünde '{{fieldName}}' adına göre yinelenen tür alanları",
duplicate_reference: "'{{refName}}' adıyla yinelenen referans", duplicate_reference: "'{{refName}}' adıyla yinelenen referans",
circular_dependency: "Tablo '{{refName}}' içeren döngüsel bağımlılık", circular_dependency: "Tablo '{{refName}}' içeren döngüsel bağımlılık",
timeline: "Zaman çizelgesi", timeline: "Zaman çizelgesi",
@ -213,7 +223,8 @@ const tr = {
not_found: "Bulunamadı", not_found: "Bulunamadı",
pick_db: "Veritabanı seç", pick_db: "Veritabanı seç",
generic: "Genel", generic: "Genel",
generic_description: "Genel diyagramlar herhangi bir SQL türüne dışa aktarılabilir ancak az sayıda veri türünü destekler.", generic_description:
"Genel diyagramlar herhangi bir SQL türüne dışa aktarılabilir ancak az sayıda veri türünü destekler.",
enums: "Enums", enums: "Enums",
add_enum: "Enum ekle", add_enum: "Enum ekle",
edit_enum: "{{extra}} Enum'u düzenle {{enumName}}", edit_enum: "{{extra}} Enum'u düzenle {{enumName}}",
@ -225,7 +236,7 @@ const tr = {
no_enums_text: "Burada enum tanımlayın", no_enums_text: "Burada enum tanımlayın",
declare_array: "Dizi bildir", declare_array: "Dizi bildir",
empty_index_name: "'{{tableName}}' tablosunda isimsiz bir dizin bildirildi", empty_index_name: "'{{tableName}}' tablosunda isimsiz bir dizin bildirildi",
didnt_find_diagram: "Oops! Diyagram bulunamadı." didnt_find_diagram: "Oops! Diyagram bulunamadı.",
}, },
}; };

218
src/i18n/locales/ug.js Normal file
View File

@ -0,0 +1,218 @@
const uyghur = {
name: "Uyghur",
native_name: "ئۇيغۇرچە",
code: "ug",
};
const ug = {
translation: {
report_bug: "بۇغ رېپورت قىلىڭ",
import_from: "ئېكىر",
import: "ئېكىر",
file: "ھۆججەت",
new: "يېڭى",
new_window: "يېڭى دەرۋازا",
open: "ئېچىش",
save: "ساقلاش",
save_as: "دەپ ساقلاش",
save_as_template: "شablon دەپ ساقلاش",
template_saved: "شablon ساقلانغان!",
rename: "ئادىنى ئۆزگەرتىش",
delete_diagram: "رەسمنى ئۆچۈرۈش",
are_you_sure_delete_diagram:
"سىز ھەقىقەتەن بۇ رەسمنى ئۆچۈرۈشنى خالايمسىز؟ بۇ ھەرىكەت قايتا قۇرغىلى بولمايدۇ.",
oops_smth_went_wrong: "ئوپ! بىر نەرسە خاتا بولدى.",
import_diagram: "رەسمنى ئېكىر",
import_from_source: "SQL دىن ئېكىر",
export_as: "دەپ ئېكسپورت قىلىش",
export_source: "SQL ئېكسپورت",
models: "مودېللار",
exit: "چىقىش",
edit: "تەھرىرلاش",
undo: "قايتۇرۇش",
redo: "يېڭىدىن قىلىش",
clear: "تازىلاش",
are_you_sure_clear:
"سىز ھەقىقەتەن بۇ رەسمنى تازىلاشنى خالايمسىز؟ بۇ قايتا قۇرغىلى بولمايدۇ.",
cut: "كېسىش",
copy: "نۇسخا ئېلىش",
paste: "قويۇش",
duplicate: "نۇسخىسىنى ياساش",
delete: "ئۆچۈرۈش",
copy_as_image: "رەسىم سۈپىتىدە نۇسخا ئېلىش",
view: "كۆرۈش",
header: "مېنۇ بار",
sidebar: "يانتۇ بار",
issues: "مەسىلىلەر",
presentation_mode: ەqdimات رېژىمى",
strict_mode: "تىزىملىك رېژىمى",
field_details: "ئالاقە تەپسىلاتلىرى",
reset_view: "كۆرۈشنى قايتا قۇرۇش",
show_grid: "تارماقنى كۆرسىتىش",
show_cardinality: "كارتىنالىتىنى كۆرسىتىش",
theme: "تېما",
light: "يېنىق",
dark: "قارا",
zoom_in: "زوم قىلىش",
zoom_out: "زومنى تۆۋەنلىتىش",
fullscreen: "تولۇق ئېكران",
settings: "تەڭشەك",
show_timeline: "ۋاقىت جەدۋىلىنى كۆرسىتىش",
autosave: "ئۆز-ئۆزىگە ساقلاش",
panning: "پانننگ",
table_width: "جەدۋەل كەڭلىكى",
language: "تىل",
flush_storage: "ساقلاشنى تازىلاش",
are_you_sure_flush_storage:
"سىز ھەقىقەتەن ساقلاشنى تازىلاشنى خالايمسىز؟ بۇ سىزنىڭ بارلىق رەسملەرنى ۋە خاس شablونلارنى قايتا قۇرغىلى بولمايدۇ.",
storage_flushed: "ساقلاش تازىلاندى",
help: "ياردەم",
shortcuts: "قىسقا يوللار",
ask_on_discord: "بىز بىلەن Discord دا سوراڭ",
feedback: "پىكىر",
no_changes: "بىرەر ئۆزگىرىش يوق",
loading: "يۈكلەش...",
last_saved: "ئاخىرىدا ساقلانغان",
saving: "ساقلاۋاتىدۇ...",
failed_to_save: "ساقلاشقا مەغلۇپ بولدى",
fit_window_reset: "دەرۋازىنى ماسلاشتۇرۇش / قايتا قۇرۇش",
zoom: "زوم",
add_table: "جەدۋەل قوشۇش",
add_area: "ئارالۇق قوشۇش",
add_note: "بەلگە قوشۇش",
add_type: "تۈر قوشۇش",
to_do: "ئورۇنلىشىش",
tables: "جەدۋەللەر",
relationships: "مۇناسىۋەتلەر",
subject_areas: "مەزمۇن بۆلەكلىرى",
notes: "بەلگىلەر",
types: "تۈرلەر",
search: "ئىزدەش...",
no_tables: "جەدۋەل يوق",
no_tables_text: "رەسمنى ياساشنى باشلاڭ!",
no_relationships: "مۇناسىۋەت يوق",
no_relationships_text: "ئالاقە قۇرۇش ئۈچۈن بۆلەكلىرىنى تارتىڭ!",
no_subject_areas: "مەزمۇن بۆلەكلىرى يوق",
no_subject_areas_text: "جەدۋەللەرنى مەزمۇن بۆلەكلىرىگە قوشۇڭ!",
no_notes: "بەلگىلەر يوق",
no_notes_text: "قوشۇمچە ئۇچۇرنى خاتىرىلەش ئۈچۈن بەلگىلەرنى ئىشلىتىڭ",
no_types: "تۈرلەر يوق",
no_types_text: "خاس سانلىق مەلۇمات تۈرلىرىنى ياساڭ",
no_issues: "مەسىلىلەر تېپىلمىدى.",
strict_mode_is_on_no_issues:
"تىزىملىك رېژىمى قوزغىتىلغان، شۇڭا مەسىلىلەر كۆرۈلمەيدۇ.",
name: "ئاد",
type: "تۈر",
null: "Null",
not_null: "Null ئەمەس",
primary: "بىرلەشمىسى",
unique: "يەككە",
autoincrement: "ئۆز-ئۆزىگە قوشۇش",
default_value: "ئادەتتىكى قىممەت",
check: "تەكشۈرۈش ئىپادىسى",
this_will_appear_as_is: "*بۇ ياسالغان سكرىپتتە شۇنداقلا كۆرۈنىدۇ.",
comment: "ئىزاھات",
add_field: "بۆلەك قوشۇش",
values: "قىممەتلەر",
size: "ئۆلچەم",
precision: "دۇرۇسلىق",
set_precision: "دۇرۇسلىقىنى بەلگىلەش: (ئۆلچەم، رەقەم)",
use_for_batch_input: "بىر قېتىملىق كىرگۈزۈش ئۈچۈن ئىشلىتىش",
indices: "ئىنكس",
add_index: "ئىنكس قوشۇش",
select_fields: "بۆلەكلىرىنى تاللاش",
title: "باشلىق",
not_set: "بەلگىلەلمىگەن",
foreign: "تاشقى",
cardinality: "كارتىنالىتى",
on_update: "يېڭىلانغاندا",
on_delete: "ئۆچۈرۈلگەندە",
swap: "ئۆزگەرتىش",
one_to_one: "بىر-بىرگە",
one_to_many: "بىر-كۆپكە",
many_to_one: "كۆپ-بىرگە",
content: "مەزمۇن",
types_info:
"بۇ ئىقتىدار object-relational DBMS لىرىگە، PostgreSQL غا خاس.\nئەگەر MySQL ياكى MariaDB غا ئىشلىتىلسە، مۇناسىۋەتلىك json توغرا تەكشۈرۈش بىلەن بىر JSON تۈرى ياسىلىدۇ.\nئەگەر SQLite غا ئىشلىتىلسە، بۇ BLOB غا ئۆزگەرتىلىدۇ.\nئەگەر MSSQL غا ئىشلىتىلسە، بىرىنچى بۆلەك ئۈچۈن بىر تۈر لەۋھەسى ياسىلىدۇ.",
table_deleted: "جەدۋەل ئۆچۈرۈلدى",
area_deleted: "ئارالۇق ئۆچۈرۈلدى",
note_deleted: "بەلگە ئۆچۈرۈلدى",
relationship_deleted: "مۇناسىۋەت ئۆچۈرۈلدى",
type_deleted: "تۈر ئۆچۈرۈلدى",
cannot_connect: "باغلىنىشقا بولمايدۇ، بۆلەك تۈرى پەرقلىق",
copied_to_clipboard: "كلىپبوردقا نۇسخا ئېلىندى",
create_new_diagram: "يېڭى رەسمنى ياساش",
cancel: "بەجىرىش",
open_diagram: "رەسمنى ئېچىش",
rename_diagram: "رەسمنىڭ نامىنى ئۆزگەرتىش",
export: "ئېكسپورت",
export_image: "رەسىمنى ئېكسپورت",
create: "ياساش",
confirm: "تاسدىقلاش",
last_modified: "ئاخىرىدا ئۆزگەرتىلگەن",
drag_and_drop_files:
"ھۆججەتلەرنى بۇ يەرگە تارتىپ قويۇڭ ياكى يۈكلەش ئۈچۈن بېسىڭ.",
upload_sql_to_generate_diagrams:
"جەدۋەل ۋە بۆلەكلىرىڭىزنى ئاپتوماتىك ياساش ئۈچۈن SQL ھۆججىتىنى يۈكلەڭ.",
overwrite_existing_diagram: "بار بولغان رەسمنى يېڭىدىن يازماق",
only_mysql_supported: "*ھازىرچە پەقەت MySQL سكرىپتلىرىنى يۈكلەش قوللايدۇ.",
blank: "بوش",
filename: "ھۆججەت نامى",
table_w_no_name: "ئادسىز جەدۋەل ئېلان قىلىندى",
duplicate_table_by_name: "ئاد بىلەن نۇسخا جەدۋەل '{{tableName}}'",
empty_field_name: "جەدۋەل '{{tableName}}' دا بوش بۆلەك نامى",
empty_field_type: "جەدۋەل '{{tableName}}' دا بوش بۆلەك تۈرى",
no_values_for_field:
"جەدۋەل '{{tableName}}' نىڭ بۆلەك '{{fieldName}}' نىڭ تۈرى {{type}}، ئەمما قىممەت بەلگىلەلمىدى",
default_doesnt_match_type:
"جەدۋەل '{{tableName}}' دا بۆلەك '{{fieldName}}' نىڭ ئادىتتىكى قىممىتى تۈرىگە ماس كەلمەيدۇ",
not_null_is_null:
"جەدۋەل '{{tableName}}' نىڭ بۆلەك '{{fieldName}}' نىڭ قىممىتى NOT NULL، ئەمما ئادىتتىكى NULL",
duplicate_fields:
"جەدۋەل '{{tableName}}' دا نام '{{fieldName}}' بولغان نۇسخا بۆلەك",
duplicate_index:
"جەدۋەل '{{tableName}}' دا نام '{{indexName}}' بولغان نۇسخا ئىنكس",
empty_index: "جەدۋەل '{{tableName}}' دا ئىنكس بۆلەك ئىنكس قىلمايدۇ",
no_primary_key: "جەدۋەل '{{tableName}}' دا بىرلەشمىسى يوق",
type_with_no_name: "نامسىز تۈر ئېلان قىلىندى",
duplicate_types: "نام '{{typeName}}' بولغان نۇسخا تۈرلەر",
type_w_no_fields: "بۆلەكلىرى يوق تۈر '{{typeName}}' ئېلان قىلىندى",
empty_type_field_name: "تۈر '{{typeName}}' دا بوش بۆلەك نامى",
empty_type_field_type: "تۈر '{{typeName}}' دا بوش بۆلەك تۈرى",
no_values_for_type_field:
"تۈر '{{typeName}}' نىڭ بۆلەك '{{fieldName}}' نىڭ تۈرى {{type}}، ئەمما قىممەت بەلگىلەلمىدى",
duplicate_type_fields:
"تۈر '{{typeName}}' دا نام '{{fieldName}}' بولغان نۇسخا تۈر بۆلەكلىرى",
duplicate_reference: "نام '{{refName}}' بولغان نۇسخا نىشان",
circular_dependency: "جەدۋەل '{{refName}}' دا دائىرىلىك باغلىقلىق",
timeline: "ۋاقىت جەدۋىلى",
priority: "ئالاھىدىلىك",
none: "يوق",
low: "تۆۋەن",
medium: "ئوتتۇرا",
high: "يۇقىرى",
sort_by: "بويىچە تىزىش",
my_order: "مەننىڭ تىزىم",
completed: "تاماملاندى",
alphabetically: "ئەپبە بويىچە",
add_task: "ۋەزىپە قوشۇش",
details: "تەپسىلاتلار",
no_tasks: "سىزنىڭ ھازىرچە ھېچقانداق ۋەزىپەڭىز يوق.",
no_activity: "سىزنىڭ ھازىرچە ھېچقانداق پائالىيىتىڭىز يوق.",
move_element: "{{name}} نى {{coords}} غا يۆتكىڭ",
edit_area: "{{extra}} ئارالۇقنى تەھرىرلىڭ {{areaName}}",
delete_area: "ئارالۇقنى ئۆچۈرۈڭ {{areaName}}",
edit_note: "{{extra}} بەلگىنى تەھرىرلىڭ {{noteTitle}}",
delete_note: "بەلگىنى ئۆچۈرۈڭ {{noteTitle}}",
edit_table: "{{extra}} جەدۋەلنى تەھرىرلىڭ {{tableName}}",
delete_table: "جەدۋەلنى ئۆچۈرۈڭ {{tableName}}",
edit_type: "{{extra}} تۈرنى تەھرىرلىڭ {{typeName}}",
delete_type: "تۈرنى ئۆچۈرۈڭ {{typeName}}",
add_relationship: "مۇناسىۋەت قوشۇڭ",
edit_relationship: "{{extra}} مۇناسىۋەتنى تەھرىرلىڭ {{refName}}",
delete_relationship: "مۇناسىۋەتنى ئۆچۈرۈڭ {{refName}}",
not_found: "تەپىلمايدۇ",
},
};
export { ug, uyghur };

View File

@ -7,6 +7,7 @@ const ukrainian = {
const uk = { const uk = {
translation: { translation: {
report_bug: "Повідомити про помилку", report_bug: "Повідомити про помилку",
import_from: "Імпортувати",
import: "Імпортувати", import: "Імпортувати",
file: "Файл", file: "Файл",
new: "Новий", new: "Новий",
@ -18,7 +19,8 @@ const uk = {
template_saved: "Шаблон збережено!", template_saved: "Шаблон збережено!",
rename: "Перейменувати", rename: "Перейменувати",
delete_diagram: "Видалити діаграму", delete_diagram: "Видалити діаграму",
are_you_sure_delete_diagram: "Ви впевнені, що хочете видалити цю діаграму? Ця операція є незворотною.", are_you_sure_delete_diagram:
"Ви впевнені, що хочете видалити цю діаграму? Ця операція є незворотною.",
oops_smth_went_wrong: "Упс! Щось пішло не так.", oops_smth_went_wrong: "Упс! Щось пішло не так.",
import_diagram: "Імпортувати діаграму", import_diagram: "Імпортувати діаграму",
import_from_source: "Імпортувати з SQL", import_from_source: "Імпортувати з SQL",
@ -30,7 +32,8 @@ const uk = {
undo: "Скасувати", undo: "Скасувати",
redo: "Повторити", redo: "Повторити",
clear: "Очистити", clear: "Очистити",
are_you_sure_clear: "Ви впевнені, що хочете очистити діаграму? Це незворотно.", are_you_sure_clear:
"Ви впевнені, що хочете очистити діаграму? Це незворотно.",
cut: "Вирізати", cut: "Вирізати",
copy: "Копіювати", copy: "Копіювати",
paste: "Вставити", paste: "Вставити",
@ -60,7 +63,8 @@ const uk = {
table_width: "Ширина таблиці", table_width: "Ширина таблиці",
language: "Мова", language: "Мова",
flush_storage: "Очистити сховище", flush_storage: "Очистити сховище",
are_you_sure_flush_storage: "Ви впевнені, що хочете очистити сховище? Це незворотно видалить всі ваші діаграми та користувацькі шаблони.", are_you_sure_flush_storage:
"Ви впевнені, що хочете очистити сховище? Це незворотно видалить всі ваші діаграми та користувацькі шаблони.",
storage_flushed: "Сховище очищено", storage_flushed: "Сховище очищено",
help: "Допомога", help: "Допомога",
shortcuts: "Гарячі клавіші", shortcuts: "Гарячі клавіші",
@ -87,7 +91,8 @@ const uk = {
no_tables: "Немає таблиць", no_tables: "Немає таблиць",
no_tables_text: "Почніть створювати вашу діаграму!", no_tables_text: "Почніть створювати вашу діаграму!",
no_relationships: "Немає зв'язків", no_relationships: "Немає зв'язків",
no_relationships_text: "Перетягніть, щоб з'єднати поля та створити зв'язки!", no_relationships_text:
"Перетягніть, щоб з'єднати поля та створити зв'язки!",
no_subject_areas: "Немає тематичних областей", no_subject_areas: "Немає тематичних областей",
no_subject_areas_text: "Додайте тематичні області для групування таблиць!", no_subject_areas_text: "Додайте тематичні області для групування таблиць!",
no_notes: "Немає нотаток", no_notes: "Немає нотаток",
@ -95,7 +100,8 @@ const uk = {
no_types: "Немає типів", no_types: "Немає типів",
no_types_text: "Створіть власні користувацькі типи даних", no_types_text: "Створіть власні користувацькі типи даних",
no_issues: "Проблем не виявлено.", no_issues: "Проблем не виявлено.",
strict_mode_is_on_no_issues: "Строгий режим вимкнено, тому проблеми не будуть відображатися.", strict_mode_is_on_no_issues:
"Строгий режим вимкнено, тому проблеми не будуть відображатися.",
name: "Назва", name: "Назва",
type: "Тип", type: "Тип",
null: "Null", null: "Null",
@ -127,7 +133,8 @@ const uk = {
one_to_many: "Один до багатьох", one_to_many: "Один до багатьох",
many_to_one: "Багато до одного", many_to_one: "Багато до одного",
content: "Зміст", content: "Зміст",
types_info: "Ця функція призначена для об'єктно-реляційних СУБД, таких як PostgreSQL.\nЯкщо використовується для MySQL або MariaDB, буде згенерований тип JSON з відповідною перевіркою JSON.\nЯкщо використовується для SQLite, буде перетворено на BLOB.\nЯкщо використовується для MSSQL, буде згенеровано тип-аліас для першого поля.", types_info:
"Ця функція призначена для об'єктно-реляційних СУБД, таких як PostgreSQL.\nЯкщо використовується для MySQL або MariaDB, буде згенерований тип JSON з відповідною перевіркою JSON.\nЯкщо використовується для SQLite, буде перетворено на BLOB.\nЯкщо використовується для MSSQL, буде згенеровано тип-аліас для першого поля.",
table_deleted: "Таблицю видалено", table_deleted: "Таблицю видалено",
area_deleted: "Область видалено", area_deleted: "Область видалено",
note_deleted: "Нотатку видалено", note_deleted: "Нотатку видалено",
@ -144,22 +151,29 @@ const uk = {
create: "Створити", create: "Створити",
confirm: "Підтвердити", confirm: "Підтвердити",
last_modified: "Остання зміна", last_modified: "Остання зміна",
drag_and_drop_files: "Перетягніть файл сюди або натисніть для завантаження.", drag_and_drop_files:
support_json_and_ddb: "Підтримуються файли JSON та DDB", "Перетягніть файл сюди або натисніть для завантаження.",
upload_sql_to_generate_diagrams: "Завантажте SQL файл для автоматичного створення ваших таблиць та стовпців.", upload_sql_to_generate_diagrams:
"Завантажте SQL файл для автоматичного створення ваших таблиць та стовпців.",
overwrite_existing_diagram: "Перезаписати існуючу діаграму", overwrite_existing_diagram: "Перезаписати існуючу діаграму",
only_mysql_supported: "*На даний момент підтримується завантаження лише MySQL скриптів.", only_mysql_supported:
"*На даний момент підтримується завантаження лише MySQL скриптів.",
blank: "Порожній", blank: "Порожній",
filename: "Назва файлу", filename: "Назва файлу",
table_w_no_name: "Оголошено таблицю без назви", table_w_no_name: "Оголошено таблицю без назви",
duplicate_table_by_name: "Дубльована таблиця з назвою '{{tableName}}'", duplicate_table_by_name: "Дубльована таблиця з назвою '{{tableName}}'",
empty_field_name: "Порожнє поле `name` в таблиці '{{tableName}}'", empty_field_name: "Порожнє поле `name` в таблиці '{{tableName}}'",
empty_field_type: "Порожнє поле `type` в таблиці '{{tableName}}'", empty_field_type: "Порожнє поле `type` в таблиці '{{tableName}}'",
no_values_for_field: "'{{fieldName}}' поле в таблиці '{{tableName}}' має тип `{{type}}`, але значення не вказані", no_values_for_field:
default_doesnt_match_type: "Значення за замовчуванням для поля '{{fieldName}}' в таблиці '{{tableName}}' не відповідає його типу", "'{{fieldName}}' поле в таблиці '{{tableName}}' має тип `{{type}}`, але значення не вказані",
not_null_is_null: "'{{fieldName}}' поле в таблиці '{{tableName}}' є NOT NULL, але має значення за замовчуванням NULL", default_doesnt_match_type:
duplicate_fields: "Дубльовані поля таблиці з назвою '{{fieldName}}' в таблиці '{{tableName}}'", "Значення за замовчуванням для поля '{{fieldName}}' в таблиці '{{tableName}}' не відповідає його типу",
duplicate_index: "Дубльований індекс з назвою '{{indexName}}' в таблиці '{{tableName}}'", not_null_is_null:
"'{{fieldName}}' поле в таблиці '{{tableName}}' є NOT NULL, але має значення за замовчуванням NULL",
duplicate_fields:
"Дубльовані поля таблиці з назвою '{{fieldName}}' в таблиці '{{tableName}}'",
duplicate_index:
"Дубльований індекс з назвою '{{indexName}}' в таблиці '{{tableName}}'",
empty_index: "Індекс в таблиці '{{tableName}}' не індексує жодного стовпця", empty_index: "Індекс в таблиці '{{tableName}}' не індексує жодного стовпця",
no_primary_key: "Таблиця '{{tableName}}' не має первинного ключа", no_primary_key: "Таблиця '{{tableName}}' не має первинного ключа",
type_with_no_name: "Оголошено тип без назви", type_with_no_name: "Оголошено тип без назви",
@ -167,10 +181,13 @@ const uk = {
type_w_no_fields: "Оголошено порожній тип '{{typeName}}' без полів", type_w_no_fields: "Оголошено порожній тип '{{typeName}}' без полів",
empty_type_field_name: "Порожнє поле `name` в типі '{{typeName}}'", empty_type_field_name: "Порожнє поле `name` в типі '{{typeName}}'",
empty_type_field_type: "Порожнє поле `type` в типі '{{typeName}}'", empty_type_field_type: "Порожнє поле `type` в типі '{{typeName}}'",
no_values_for_type_field: "'{{fieldName}}' поле в типі '{{typeName}}' має тип `{{type}}`, але значення не вказані", no_values_for_type_field:
duplicate_type_fields: "Дубльовані поля типу з назвою '{{fieldName}}' в типі '{{typeName}}'", "'{{fieldName}}' поле в типі '{{typeName}}' має тип `{{type}}`, але значення не вказані",
duplicate_type_fields:
"Дубльовані поля типу з назвою '{{fieldName}}' в типі '{{typeName}}'",
duplicate_reference: "Дубльована посилання з назвою '{{refName}}'", duplicate_reference: "Дубльована посилання з назвою '{{refName}}'",
circular_dependency: "Циклічна залежність, що стосується таблиці '{{refName}}'", circular_dependency:
"Циклічна залежність, що стосується таблиці '{{refName}}'",
timeline: "Хронологія", timeline: "Хронологія",
priority: "Пріоритет", priority: "Пріоритет",
none: "Жодний", none: "Жодний",

View File

@ -2,11 +2,12 @@ const urdu = {
name: "Urdu", name: "Urdu",
native_name: "اردو", native_name: "اردو",
code: "ur", code: "ur",
}; };
const ur = { const ur = {
translation: { translation: {
report_bug: "بگ رپورٹ کریں", report_bug: "بگ رپورٹ کریں",
import_from: "درآمد کریں",
import: "درآمد کریں", import: "درآمد کریں",
file: "فائل", file: "فائل",
new: "نیا", new: "نیا",
@ -18,7 +19,8 @@ const urdu = {
template_saved: "ٹیمپلیٹ محفوظ ہو گیا!", template_saved: "ٹیمپلیٹ محفوظ ہو گیا!",
rename: "نام تبدیل کریں", rename: "نام تبدیل کریں",
delete_diagram: "ڈایاگرام حذف کریں", delete_diagram: "ڈایاگرام حذف کریں",
are_you_sure_delete_diagram: "کیا آپ واقعی اس ڈایاگرام کو حذف کرنا چاہتے ہیں؟ یہ عمل ناقابل واپسی ہے۔", are_you_sure_delete_diagram:
"کیا آپ واقعی اس ڈایاگرام کو حذف کرنا چاہتے ہیں؟ یہ عمل ناقابل واپسی ہے۔",
oops_smth_went_wrong: "اوہ! کچھ غلط ہو گیا۔", oops_smth_went_wrong: "اوہ! کچھ غلط ہو گیا۔",
import_diagram: "ڈایاگرام درآمد کریں", import_diagram: "ڈایاگرام درآمد کریں",
import_from_source: "ماخذ سے درآمد کریں", import_from_source: "ماخذ سے درآمد کریں",
@ -30,7 +32,8 @@ const urdu = {
undo: "واپس", undo: "واپس",
redo: "دوبارہ کریں", redo: "دوبارہ کریں",
clear: "صاف کریں", clear: "صاف کریں",
are_you_sure_clear: "کیا آپ واقعی اس ڈایاگرام کو صاف کرنا چاہتے ہیں؟ یہ ناقابل واپسی ہے۔", are_you_sure_clear:
"کیا آپ واقعی اس ڈایاگرام کو صاف کرنا چاہتے ہیں؟ یہ ناقابل واپسی ہے۔",
cut: "کٹ", cut: "کٹ",
copy: "کاپی", copy: "کاپی",
paste: "پیسٹ", paste: "پیسٹ",
@ -60,7 +63,8 @@ const urdu = {
table_width: "ٹیبل کی چوڑائی", table_width: "ٹیبل کی چوڑائی",
language: "زبان", language: "زبان",
flush_storage: "اسٹوریج صاف کریں", flush_storage: "اسٹوریج صاف کریں",
are_you_sure_flush_storage: "کیا آپ واقعی اسٹوریج کو صاف کرنا چاہتے ہیں؟ یہ آپ کے تمام ڈایاگرام اور کسٹم ٹیمپلیٹس کو ناقابل واپسی طور پر حذف کر دے گا۔", are_you_sure_flush_storage:
"کیا آپ واقعی اسٹوریج کو صاف کرنا چاہتے ہیں؟ یہ آپ کے تمام ڈایاگرام اور کسٹم ٹیمپلیٹس کو ناقابل واپسی طور پر حذف کر دے گا۔",
storage_flushed: "اسٹوریج صاف کر دیا گیا", storage_flushed: "اسٹوریج صاف کر دیا گیا",
help: "مدد", help: "مدد",
shortcuts: "شارٹ کٹس", shortcuts: "شارٹ کٹس",
@ -95,7 +99,8 @@ const urdu = {
no_types: "کوئی قسم نہیں", no_types: "کوئی قسم نہیں",
no_types_text: "اپنے کسٹم ڈیٹا کی اقسام بنائیں", no_types_text: "اپنے کسٹم ڈیٹا کی اقسام بنائیں",
no_issues: "کوئی مسائل نہیں ملے", no_issues: "کوئی مسائل نہیں ملے",
strict_mode_is_on_no_issues: "سخت موڈ بند ہے اس لئے کوئی مسائل نہیں دکھائے جا رہے ہیں۔", strict_mode_is_on_no_issues:
"سخت موڈ بند ہے اس لئے کوئی مسائل نہیں دکھائے جا رہے ہیں۔",
name: "نام", name: "نام",
type: "قسم", type: "قسم",
null: "نل", null: "نل",
@ -142,7 +147,6 @@ const urdu = {
no_tasks: "آپ کے پاس ابھی تک کوئی کام نہیں ہے۔", no_tasks: "آپ کے پاس ابھی تک کوئی کام نہیں ہے۔",
no_activity: "آپ کے پاس ابھی تک کوئی سرگرمی نہیں ہے۔", no_activity: "آپ کے پاس ابھی تک کوئی سرگرمی نہیں ہے۔",
}, },
}; };
export { ur, urdu };
export { ur, urdu };

View File

@ -7,6 +7,7 @@ const vietnamese = {
const vi = { const vi = {
translation: { translation: {
report_bug: "Báo cáo lỗi", report_bug: "Báo cáo lỗi",
import_from: "Nhập",
import: "Nhập", import: "Nhập",
file: "Tệp", file: "Tệp",
new: "Tạo mới", new: "Tạo mới",
@ -18,7 +19,8 @@ const vi = {
template_saved: "Mẫu được lưu!", template_saved: "Mẫu được lưu!",
rename: "Đổi tên", rename: "Đổi tên",
delete_diagram: "Xoá sơ đồ", delete_diagram: "Xoá sơ đồ",
are_you_sure_delete_diagram: "Bạn muốn xoá sơ đồ này không? Hành động này không thể phục hồi.", are_you_sure_delete_diagram:
"Bạn muốn xoá sơ đồ này không? Hành động này không thể phục hồi.",
oops_smth_went_wrong: "Có cái gì đó bị sai.", oops_smth_went_wrong: "Có cái gì đó bị sai.",
import_diagram: "Nhập sơ đồ", import_diagram: "Nhập sơ đồ",
import_from_source: "Nhập từ SQL", import_from_source: "Nhập từ SQL",
@ -30,7 +32,8 @@ const vi = {
undo: "Quay lại", undo: "Quay lại",
redo: "Làm lại", redo: "Làm lại",
clear: "Xóa", clear: "Xóa",
are_you_sure_clear: "Bạn có chắc chắn muốn xóa sơ đồ không? Điều này là không thể phục hồi.", are_you_sure_clear:
"Bạn có chắc chắn muốn xóa sơ đồ không? Điều này là không thể phục hồi.",
cut: "Cắt", cut: "Cắt",
copy: "Sao chép", copy: "Sao chép",
paste: "Dán", paste: "Dán",
@ -60,7 +63,8 @@ const vi = {
table_width: "Chiều rộng của bảng", table_width: "Chiều rộng của bảng",
language: "Ngôn ngữ", language: "Ngôn ngữ",
flush_storage: "Xoá bộ nhớ", flush_storage: "Xoá bộ nhớ",
are_you_sure_flush_storage: "Bạn có chắc chắn muốn xóa bộ nhớ không? Thao tác này sẽ xóa vĩnh viễn tất cả sơ đồ và mẫu tùy chỉnh của bạn.", are_you_sure_flush_storage:
"Bạn có chắc chắn muốn xóa bộ nhớ không? Thao tác này sẽ xóa vĩnh viễn tất cả sơ đồ và mẫu tùy chỉnh của bạn.",
storage_flushed: "Bộ nhớ đã được xoá", storage_flushed: "Bộ nhớ đã được xoá",
help: "Giúp đỡ", help: "Giúp đỡ",
shortcuts: "Phím tắt", shortcuts: "Phím tắt",
@ -87,7 +91,8 @@ const vi = {
no_tables: "Không có bảng", no_tables: "Không có bảng",
no_tables_text: "Bắt đầu xây dựng sơ đồ của bạn!", no_tables_text: "Bắt đầu xây dựng sơ đồ của bạn!",
no_relationships: "Không có quan hệ", no_relationships: "Không có quan hệ",
no_relationships_text: "Kéo để kết nối các trường và hình thành các quan hệ!", no_relationships_text:
"Kéo để kết nối các trường và hình thành các quan hệ!",
no_subject_areas: "Không có vùng", no_subject_areas: "Không có vùng",
no_subject_areas_text: "Thêm vùng vào nhóm các bảng!", no_subject_areas_text: "Thêm vùng vào nhóm các bảng!",
no_notes: "Không có ghi chú", no_notes: "Không có ghi chú",
@ -95,7 +100,8 @@ const vi = {
no_types: "Không có loại", no_types: "Không có loại",
no_types_text: "Tạo các loại dữ liệu tùy chỉnh của riêng bạn", no_types_text: "Tạo các loại dữ liệu tùy chỉnh của riêng bạn",
no_issues: "Không có vấn đề nào được phát hiện.", no_issues: "Không có vấn đề nào được phát hiện.",
strict_mode_is_on_no_issues: "Chế độ nghiêm ngặt bị tắt nên sẽ không có vấn đề nào được hiển thị.", strict_mode_is_on_no_issues:
"Chế độ nghiêm ngặt bị tắt nên sẽ không có vấn đề nào được hiển thị.",
name: "Tên", name: "Tên",
type: "Kiểu", type: "Kiểu",
null: "Không có giá trị", null: "Không có giá trị",
@ -105,7 +111,8 @@ const vi = {
autoincrement: "Tự động tăng", autoincrement: "Tự động tăng",
default_value: "Giá trị mặc định", default_value: "Giá trị mặc định",
check: "Kiểm tra biểu thức", check: "Kiểm tra biểu thức",
this_will_appear_as_is: "*Điều này sẽ xuất hiện trong đoạn lệnh được tạo như hiện tại.", this_will_appear_as_is:
"*Điều này sẽ xuất hiện trong đoạn lệnh được tạo như hiện tại.",
comment: "Bình luận", comment: "Bình luận",
add_field: "Thêm trường", add_field: "Thêm trường",
values: "Giá trị", values: "Giá trị",
@ -127,7 +134,8 @@ const vi = {
one_to_many: "Một đến nhiều", one_to_many: "Một đến nhiều",
many_to_one: "Nhiều thành một", many_to_one: "Nhiều thành một",
content: "Nội dung", content: "Nội dung",
types_info: "Tính năng này dành cho các DBMS quan hệ đối tượng như PostgreSQL.\nNếu được sử dụng cho MySQL hoặc MariaDB, loại JSON sẽ được tạo bằng kiểm tra xác thực json tương ứng.\nNếu được sử dụng cho SQLite, nó sẽ được dịch sang BLOB.\nNếu được sử dụng cho MSSQL một bí danh loại cho trường đầu tiên sẽ được tạo.", types_info:
"Tính năng này dành cho các DBMS quan hệ đối tượng như PostgreSQL.\nNếu được sử dụng cho MySQL hoặc MariaDB, loại JSON sẽ được tạo bằng kiểm tra xác thực json tương ứng.\nNếu được sử dụng cho SQLite, nó sẽ được dịch sang BLOB.\nNếu được sử dụng cho MSSQL một bí danh loại cho trường đầu tiên sẽ được tạo.",
table_deleted: "Đã xóa bảng", table_deleted: "Đã xóa bảng",
area_deleted: "Khu vực bị xóa", area_deleted: "Khu vực bị xóa",
note_deleted: "Đã xóa ghi chú", note_deleted: "Đã xóa ghi chú",
@ -145,8 +153,8 @@ const vi = {
confirm: "Xác nhận", confirm: "Xác nhận",
last_modified: "Sửa đổi lần cuối", last_modified: "Sửa đổi lần cuối",
drag_and_drop_files: "Kéo và thả tệp vào đây hoặc nhấp để tải lên.", drag_and_drop_files: "Kéo và thả tệp vào đây hoặc nhấp để tải lên.",
support_json_and_ddb: "Các tệp JSON và DDB được hỗ trợ", upload_sql_to_generate_diagrams:
upload_sql_to_generate_diagrams: "Tải tệp sql lên để tự động tạo bảng và cột của bạn.", "Tải tệp sql lên để tự động tạo bảng và cột của bạn.",
overwrite_existing_diagram: "Ghi đè sơ đồ hiện có", overwrite_existing_diagram: "Ghi đè sơ đồ hiện có",
only_mysql_supported: "*Hiện tại, chỉ hỗ trợ tải các tập lệnh MySQL.", only_mysql_supported: "*Hiện tại, chỉ hỗ trợ tải các tập lệnh MySQL.",
blank: "Trống", blank: "Trống",
@ -155,20 +163,28 @@ const vi = {
duplicate_table_by_name: "Bảng trùng lặp theo tên '{{tableName}}'", duplicate_table_by_name: "Bảng trùng lặp theo tên '{{tableName}}'",
empty_field_name: "Trường trống `name` trong bảng '{{tableName}}'", empty_field_name: "Trường trống `name` trong bảng '{{tableName}}'",
empty_field_type: "Trường trống `loại` trong bảng '{{tableName}}'", empty_field_type: "Trường trống `loại` trong bảng '{{tableName}}'",
no_values_for_field: "Trường '{{fieldName}}' của bảng '{{tableName}}' thuộc loại `{{type}}` nhưng không có giá trị nào được chỉ định", no_values_for_field:
default_doesnt_match_type: "Giá trị mặc định cho trường '{{fieldName}}' trong bảng '{{tableName}}' không khớp với loại của nó", "Trường '{{fieldName}}' của bảng '{{tableName}}' thuộc loại `{{type}}` nhưng không có giá trị nào được chỉ định",
not_null_is_null: "Trường '{{fieldName}}' của bảng '{{tableName}}' là NOT NULL nhưng đang là NULL", default_doesnt_match_type:
duplicate_fields: "Các trường bảng trùng lặp theo tên '{{fieldName}}' trong bảng '{{tableName}}'", "Giá trị mặc định cho trường '{{fieldName}}' trong bảng '{{tableName}}' không khớp với loại của nó",
duplicate_index: "Chỉ mục trùng lặp theo tên '{{indexName}}' trong bảng '{{tableName}}'", not_null_is_null:
"Trường '{{fieldName}}' của bảng '{{tableName}}' là NOT NULL nhưng đang là NULL",
duplicate_fields:
"Các trường bảng trùng lặp theo tên '{{fieldName}}' trong bảng '{{tableName}}'",
duplicate_index:
"Chỉ mục trùng lặp theo tên '{{indexName}}' trong bảng '{{tableName}}'",
empty_index: "Chỉ mục trong bảng '{{tableName}}' chỉ mục không có cột", empty_index: "Chỉ mục trong bảng '{{tableName}}' chỉ mục không có cột",
no_primary_key: "Bảng '{{tableName}}' không có khóa chính", no_primary_key: "Bảng '{{tableName}}' không có khóa chính",
type_with_no_name: "Khai báo một loại không có tên", type_with_no_name: "Khai báo một loại không có tên",
duplicate_types: "Các loại trùng lặp theo tên '{{typeName}}'", duplicate_types: "Các loại trùng lặp theo tên '{{typeName}}'",
type_w_no_fields: "Đã khai báo một loại trống '{{typeName}}'không có trường nào", type_w_no_fields:
"Đã khai báo một loại trống '{{typeName}}'không có trường nào",
empty_type_field_name: "Trường trống `name` trong loại '{{typeName}}'", empty_type_field_name: "Trường trống `name` trong loại '{{typeName}}'",
empty_type_field_type: "Trường trống `type` trong loại '{{typeName}}'", empty_type_field_type: "Trường trống `type` trong loại '{{typeName}}'",
no_values_for_type_field: "Trường '{{fieldName}}' thuộc loại '{{typeName}}' thuộc loại `{{type}}` nhưng không có giá trị nào được chỉ định", no_values_for_type_field:
duplicate_type_fields: "Các trường loại trùng lặp theo tên '{{fieldName}}' trong loại '{{typeName}}'", "Trường '{{fieldName}}' thuộc loại '{{typeName}}' thuộc loại `{{type}}` nhưng không có giá trị nào được chỉ định",
duplicate_type_fields:
"Các trường loại trùng lặp theo tên '{{fieldName}}' trong loại '{{typeName}}'",
duplicate_reference: "Tham chiếu trùng lặp theo tên '{{refName}}'", duplicate_reference: "Tham chiếu trùng lặp theo tên '{{refName}}'",
circular_dependency: "Bảng phụ thuộc vòng tròn liên quan đến '{{refName}}'", circular_dependency: "Bảng phụ thuộc vòng tròn liên quan đến '{{refName}}'",
timeline: "Dòng thời gian", timeline: "Dòng thời gian",

View File

@ -7,6 +7,7 @@ const traditionalChinese = {
const zh_tw = { const zh_tw = {
translation: { translation: {
report_bug: "回報錯誤", report_bug: "回報錯誤",
import_from: "匯入",
import: "匯入", import: "匯入",
file: "檔案", file: "檔案",
new: "新增", new: "新增",
@ -18,8 +19,7 @@ const zh_tw = {
template_saved: "範本已儲存!", template_saved: "範本已儲存!",
rename: "重新命名", rename: "重新命名",
delete_diagram: "刪除圖表", delete_diagram: "刪除圖表",
are_you_sure_delete_diagram: are_you_sure_delete_diagram: "您確定要刪除此圖表嗎?此操作無法復原。",
"您確定要刪除此圖表嗎?此操作無法復原。",
oops_smth_went_wrong: "糟糕!發生錯誤。", oops_smth_went_wrong: "糟糕!發生錯誤。",
import_diagram: "匯入圖表", import_diagram: "匯入圖表",
import_from_source: "從 SQL 匯入", import_from_source: "從 SQL 匯入",
@ -31,8 +31,7 @@ const zh_tw = {
undo: "復原", undo: "復原",
redo: "重做", redo: "重做",
clear: "清除", clear: "清除",
are_you_sure_clear: are_you_sure_clear: "您確定要清除圖表嗎?此操作無法復原。",
"您確定要清除圖表嗎?此操作無法復原。",
cut: "剪下", cut: "剪下",
copy: "複製", copy: "複製",
paste: "貼上", paste: "貼上",
@ -105,8 +104,7 @@ const zh_tw = {
no_types: "沒有型別", no_types: "沒有型別",
no_types_text: "建立您自己的自訂資料型別", no_types_text: "建立您自己的自訂資料型別",
no_issues: "未偵測到問題。", no_issues: "未偵測到問題。",
strict_mode_is_on_no_issues: strict_mode_is_on_no_issues: "嚴謹模式已關閉,因此不會顯示任何問題。",
"嚴謹模式已關閉,因此不會顯示任何問題。",
name: "名稱", name: "名稱",
type: "型別", type: "型別",
null: "允許空值", null: "允許空值",
@ -157,12 +155,9 @@ const zh_tw = {
confirm: "確認", confirm: "確認",
last_modified: "上次修改時間", last_modified: "上次修改時間",
drag_and_drop_files: "拖曳檔案到此處或點選上傳。", drag_and_drop_files: "拖曳檔案到此處或點選上傳。",
support_json_and_ddb: "支援 JSON 和 DDB 檔案", upload_sql_to_generate_diagrams: "上傳 SQL 檔案以自動產生表格和欄位。",
upload_sql_to_generate_diagrams:
"上傳 SQL 檔案以自動產生表格和欄位。",
overwrite_existing_diagram: "覆寫現有圖表", overwrite_existing_diagram: "覆寫現有圖表",
only_mysql_supported: only_mysql_supported: "*目前僅支援載入 MySQL 指令碼。",
"*目前僅支援載入 MySQL 指令碼。",
blank: "空白", blank: "空白",
filename: "檔案名稱", filename: "檔案名稱",
table_w_no_name: "宣告了一個沒有名稱的表格", table_w_no_name: "宣告了一個沒有名稱的表格",
@ -175,10 +170,8 @@ const zh_tw = {
"表格 '{{tableName}}' 中欄位 '{{fieldName}}' 的預設值與其型別不符", "表格 '{{tableName}}' 中欄位 '{{fieldName}}' 的預設值與其型別不符",
not_null_is_null: not_null_is_null:
"表格 '{{tableName}}' 中的 '{{fieldName}}' 欄位為 NOT NULL但預設值為 NULL", "表格 '{{tableName}}' 中的 '{{fieldName}}' 欄位為 NOT NULL但預設值為 NULL",
duplicate_fields: duplicate_fields: "表格 '{{tableName}}' 中的欄位名稱 '{{fieldName}}' 重複",
"表格 '{{tableName}}' 中的欄位名稱 '{{fieldName}}' 重複", duplicate_index: "表格 '{{tableName}}' 中的索引名稱 '{{indexName}}' 重複",
duplicate_index:
"表格 '{{tableName}}' 中的索引名稱 '{{indexName}}' 重複",
empty_index: "表格 '{{tableName}}' 中的索引未指定任何欄位", empty_index: "表格 '{{tableName}}' 中的索引未指定任何欄位",
no_primary_key: "表格 '{{tableName}}' 沒有主鍵", no_primary_key: "表格 '{{tableName}}' 沒有主鍵",
type_with_no_name: "宣告了一個沒有名稱的型別", type_with_no_name: "宣告了一個沒有名稱的型別",

View File

@ -7,6 +7,7 @@ const chinese = {
const zh = { const zh = {
translation: { translation: {
report_bug: "报告问题", report_bug: "报告问题",
import_from: "导入",
import: "导入", import: "导入",
file: "文件", file: "文件",
new: "新建", new: "新建",
@ -147,7 +148,6 @@ const zh = {
confirm: "确认", confirm: "确认",
last_modified: "最后修改", last_modified: "最后修改",
drag_and_drop_files: "拖放文件到此处或点击上传。", drag_and_drop_files: "拖放文件到此处或点击上传。",
support_json_and_ddb: "支持 JSON 和 DDB 文件",
upload_sql_to_generate_diagrams: "上传 SQL 文件以自动生成表和列。", upload_sql_to_generate_diagrams: "上传 SQL 文件以自动生成表和列。",
overwrite_existing_diagram: "覆盖现有图表", overwrite_existing_diagram: "覆盖现有图表",
only_mysql_supported: "目前仅支持加载 MySQL 脚本。", only_mysql_supported: "目前仅支持加载 MySQL 脚本。",

View File

@ -1,15 +1,18 @@
import ReactDOM from "react-dom/client"; import ReactDOM from "react-dom/client";
import { LocaleProvider } from "@douyinfe/semi-ui"; import { LocaleProvider } from "@douyinfe/semi-ui";
import { Analytics } from "@vercel/analytics/react"; import { Analytics } from "@vercel/analytics/react";
import { SpeedInsights } from "@vercel/speed-insights/react";
import App from "./App.jsx"; import App from "./App.jsx";
import en_US from "@douyinfe/semi-ui/lib/es/locale/source/en_US"; // import en_US from "@douyinfe/semi-ui/lib/es/locale/source/en_US";
import "./index.css"; import "./index.css";
import "./i18n/i18n.js"; import "./i18n/i18n.js";
import { zh } from "./i18n/locales/zh.js";
const root = ReactDOM.createRoot(document.getElementById("root")); const root = ReactDOM.createRoot(document.getElementById("root"));
root.render( root.render(
<LocaleProvider locale={en_US}> <LocaleProvider locale={zh}>
<App /> <App />
<Analytics /> <Analytics />
<SpeedInsights />
</LocaleProvider>, </LocaleProvider>,
); );

View File

@ -9,13 +9,13 @@ import postgres_icon from "../assets/postgres.png";
import sqlite_icon from "../assets/sqlite.png"; import sqlite_icon from "../assets/sqlite.png";
import mariadb_icon from "../assets/mariadb.png"; import mariadb_icon from "../assets/mariadb.png";
import sql_server_icon from "../assets/sql-server.png"; import sql_server_icon from "../assets/sql-server.png";
import discord from "../assets/discord.png"; // import discord from "../assets/discord.png";
import github from "../assets/github.png"; // import github from "../assets/github.png";
import screenshot from "../assets/screenshot.png"; import screenshot from "../assets/screenshot.png";
import FadeIn from "../animations/FadeIn"; import FadeIn from "../animations/FadeIn";
import axios from "axios"; import axios from "axios";
import { languages } from "../i18n/i18n"; import { languages } from "../i18n/i18n";
import { Tweet } from "react-tweet"; // import { Tweet } from "react-tweet";
import { socials } from "../data/socials"; import { socials } from "../data/socials";
function shortenNumber(number) { function shortenNumber(number) {
@ -49,7 +49,7 @@ export default function LandingPage() {
{showSurvey && ( {showSurvey && (
<div className="text-white font-semibold py-1.5 px-4 text-sm text-center bg-gradient-to-r from-[#12495e] from-10% via-slate-500 to-[#12495e]"> <div className="text-white font-semibold py-1.5 px-4 text-sm text-center bg-gradient-to-r from-[#12495e] from-10% via-slate-500 to-[#12495e]">
<Link to="/survey" className="hover:underline"> <Link to="/survey" className="hover:underline">
Help us improve! Share your feedback. 帮助我们改进分享您的反馈
</Link> </Link>
<div className="float-right"> <div className="float-right">
<button onClick={() => setShowSurvey(false)}> <button onClick={() => setShowSurvey(false)}>
@ -72,19 +72,18 @@ export default function LandingPage() {
<FadeIn duration={0.75}> <FadeIn duration={0.75}>
<div className="md:px-3"> <div className="md:px-3">
<h1 className="text-[42px] md:text-3xl font-bold tracking-wide bg-gradient-to-r from-sky-900 from-10% via-slate-500 to-[#12495e] inline-block text-transparent bg-clip-text"> <h1 className="text-[42px] md:text-3xl font-bold tracking-wide bg-gradient-to-r from-sky-900 from-10% via-slate-500 to-[#12495e] inline-block text-transparent bg-clip-text">
Draw, Copy, and Paste 描绘, 复制, 粘贴
</h1> </h1>
<div className="text-lg font-medium mt-1 sliding-vertical"> <div className="text-lg font-medium mt-1 sliding-vertical">
Free and open source, simple, and intuitive database design 免费开源简单易用的数据库设计编辑器数据建模器和 SQL 生成器{" "}
editor, data-modeler, and SQL generator.{" "}
<span className="ms-2 sm:block sm:ms-0 text-slate-500 bg-white font-bold whitespace-nowrap"> <span className="ms-2 sm:block sm:ms-0 text-slate-500 bg-white font-bold whitespace-nowrap">
No sign up 无需登录
</span> </span>
<span className="ms-2 sm:block sm:ms-0 text-slate-500 bg-white font-bold whitespace-nowrap"> <span className="ms-2 sm:block sm:ms-0 text-slate-500 bg-white font-bold whitespace-nowrap">
Free of charge 免费
</span> </span>
<span className="ms-2 sm:block sm:ms-0 text-slate-500 bg-white font-bold whitespace-nowrap"> <span className="ms-2 sm:block sm:ms-0 text-slate-500 bg-white font-bold whitespace-nowrap">
Quick and easy 快速且容易
</span> </span>
</div> </div>
</div> </div>
@ -98,13 +97,13 @@ export default function LandingPage() {
.scrollIntoView({ behavior: "smooth" }) .scrollIntoView({ behavior: "smooth" })
} }
> >
Learn more 查看更多
</button> </button>
<Link <Link
to="/editor" to="/editor"
className="inline-block py-3 text-white transition-all duration-300 rounded-full shadow-lg bg-sky-900 ps-7 pe-6 hover:bg-sky-800" className="inline-block py-3 text-white transition-all duration-300 rounded-full shadow-lg bg-sky-900 ps-7 pe-6 hover:bg-sky-800"
> >
Try it for yourself <i className="bi bi-arrow-right ms-1"></i> 自行尝试 <i className="bi bi-arrow-right ms-1"></i>
</Link> </Link>
</div> </div>
</div> </div>
@ -120,7 +119,7 @@ export default function LandingPage() {
{shortenNumber(stats.stars)} {shortenNumber(stats.stars)}
</div> </div>
<div className="ms-1 mt-1 font-medium tracking-wide"> <div className="ms-1 mt-1 font-medium tracking-wide">
GitHub stars GitHub 星标
</div> </div>
</div> </div>
<div className="text-center mb-4"> <div className="text-center mb-4">
@ -128,7 +127,7 @@ export default function LandingPage() {
{shortenNumber(stats.forks)} {shortenNumber(stats.forks)}
</div> </div>
<div className="ms-1 mt-1 font-medium tracking-wide"> <div className="ms-1 mt-1 font-medium tracking-wide">
GitHub forks GitHub 收藏
</div> </div>
</div> </div>
<div className="text-center mb-4"> <div className="text-center mb-4">
@ -136,32 +135,18 @@ export default function LandingPage() {
{shortenNumber(languages.length)} {shortenNumber(languages.length)}
</div> </div>
<div className="ms-1 mt-1 font-medium tracking-wide"> <div className="ms-1 mt-1 font-medium tracking-wide">
Languages 语言
</div> </div>
</div> </div>
<div className="w-96 md:w-full h-full md:text-center">
<div>
Join our community, become one of us. Help us become bigger and
better, support us by donating.
</div>
<a
href="https://buymeacoffee.com/drawdb"
className="inline-block bg-white hover:bg-zinc-50 transition-all duration-300 rounded-full px-9 py-2.5 shadow mt-2"
>
Support us{" "}
<i className="ms-2 text-rose-600 fa-regular fa-heart"></i>
</a>
</div>
</div> </div>
<div className="mt-16 w-[75%] text-center sm:w-full mx-auto shadow-sm rounded-2xl border p-6 bg-white space-y-3"> <div className="mt-16 w-[75%] text-center sm:w-full mx-auto shadow-sm rounded-2xl border p-6 bg-white space-y-3">
<div className="text-lg font-medium"> <div className="text-lg font-medium">
Build diagrams with a few clicks, see the full picture, export SQL 用几下点击构建图表全面了解导出 SQL 脚本自定义你的编辑器更多功能
scripts, customize your editor, and more.
</div> </div>
<img src={screenshot} className="mx-auto" /> <img src={screenshot} className="mx-auto" />
</div> </div>
<div className="text-lg font-medium text-center mt-12 mb-6"> <div className="text-lg font-medium text-center mt-12 mb-6">
Design for your database 设计你的数据库
</div> </div>
<div className="flex justify-center items-center gap-8 md:block"> <div className="flex justify-center items-center gap-8 md:block">
{dbs.map((s, i) => ( {dbs.map((s, i) => (
@ -192,10 +177,10 @@ export default function LandingPage() {
<div id="features" className="py-8 px-36 md:px-8"> <div id="features" className="py-8 px-36 md:px-8">
<FadeIn duration={1}> <FadeIn duration={1}>
<div className="text-base font-medium text-center text-sky-900"> <div className="text-base font-medium text-center text-sky-900">
More than just an editor 不仅仅是一个编辑器
</div> </div>
<div className="text-2xl mt-1 font-medium text-center"> <div className="text-2xl mt-1 font-medium text-center">
What drawDB has to offer drawDB 的功能介绍
</div> </div>
<div className="grid grid-cols-3 gap-8 mt-10 md:grid-cols-2 sm:grid-cols-1"> <div className="grid grid-cols-3 gap-8 mt-10 md:grid-cols-2 sm:grid-cols-1">
{features.map((f, i) => ( {features.map((f, i) => (
@ -216,9 +201,9 @@ export default function LandingPage() {
</div> </div>
{/* Tweets */} {/* Tweets */}
<div className="px-40 mt-6 md:px-8"> {/* <div className="px-40 mt-6 md:px-8">
<div className="text-center text-2xl md:text-xl font-medium"> <div className="text-center text-2xl md:text-xl font-medium">
What the internet says about us 网上关于我们的说法
</div> </div>
<div <div
data-theme="light" data-theme="light"
@ -229,10 +214,10 @@ export default function LandingPage() {
<Tweet id="1785457354777006524" /> <Tweet id="1785457354777006524" />
<Tweet id="1776842268042756248" /> <Tweet id="1776842268042756248" />
</div> </div>
</div> </div> */}
{/* Contact us */} {/* Contact us */}
<svg {/* <svg
viewBox="0 0 1440 54" viewBox="0 0 1440 54"
fill="none" fill="none"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
@ -246,11 +231,10 @@ export default function LandingPage() {
</svg> </svg>
<div className="bg-zinc-100 py-8 px-32 md:px-8"> <div className="bg-zinc-100 py-8 px-32 md:px-8">
<div className="mt-4 mb-2 text-2xl font-bold text-center"> <div className="mt-4 mb-2 text-2xl font-bold text-center">
Reach out to us 联系我们
</div> </div>
<div className="text-lg text-center mb-4"> <div className="text-lg text-center mb-4">
We love hearing from you. Join our community on Discord, GitHub, and 我们很乐意听到您的声音加入我们在 DiscordGitHub X 上的社区
X.
</div> </div>
<div className="px-36 text-center md:px-8"> <div className="px-36 text-center md:px-8">
<div className="md:block md:space-y-3 flex gap-3 justify-center"> <div className="md:block md:space-y-3 flex gap-3 justify-center">
@ -263,7 +247,7 @@ export default function LandingPage() {
<div className="bg-zinc-800 hover:opacity-90 transition-all duration-300 flex items-center gap-4 px-14 py-4 rounded-lg"> <div className="bg-zinc-800 hover:opacity-90 transition-all duration-300 flex items-center gap-4 px-14 py-4 rounded-lg">
<img src={github} className="h-8" /> <img src={github} className="h-8" />
<div className="text-lg text-white font-bold"> <div className="text-lg text-white font-bold">
See the source 查看源代码
</div> </div>
</div> </div>
</a> </a>
@ -276,7 +260,7 @@ export default function LandingPage() {
<div className="bg-[#5865f2] hover:opacity-90 transition-all duration-300 flex items-center gap-4 px-8 py-4 rounded-lg"> <div className="bg-[#5865f2] hover:opacity-90 transition-all duration-300 flex items-center gap-4 px-8 py-4 rounded-lg">
<img src={discord} className="h-8" /> <img src={discord} className="h-8" />
<div className="text-lg text-white font-bold"> <div className="text-lg text-white font-bold">
Join us on Discord Discord 加入我们
</div> </div>
</div> </div>
</a> </a>
@ -288,34 +272,19 @@ export default function LandingPage() {
> >
<div className="text-white bg-zinc-800 hover:opacity-90 transition-all duration-300 flex items-center gap-4 px-12 py-4 rounded-lg"> <div className="text-white bg-zinc-800 hover:opacity-90 transition-all duration-300 flex items-center gap-4 px-12 py-4 rounded-lg">
<i className="text-2xl bi bi-twitter-x" /> <i className="text-2xl bi bi-twitter-x" />
<div className="text-lg font-bold">Follow us on X</div> <div className="text-lg font-bold">X 上关注我们</div>
</div> </div>
</a> </a>
</div> </div>
<div className="my-8">
<div>
If you&apos;re finding drawDB useful and would like to help us in
improving and adding new features, consider making a donation.
</div>
<div>Your support means a lot to us!</div>
<a
href="https://buymeacoffee.com/drawdb"
className="inline-block bg-white hover:bg-zinc-50 transition-all duration-300 rounded-full px-16 py-2.5 shadow mt-2"
>
Support us{" "}
<i className="ms-2 text-rose-600 fa-regular fa-heart"></i>
</a>
</div>
</div>
</div> </div>
</div> */}
<div className="bg-red-700 py-1 text-center text-white text-xs font-semibold px-3"> <div className="bg-red-700 py-1 text-center text-white text-xs font-semibold px-3 mt-5">
Attention! The diagrams are saved in your browser. Before clearing the 注意图表会在您的浏览器中保存在清除浏览器之前请确保备份您的数据
browser make sure to back up your data.
</div> </div>
<hr className="border-zinc-300" /> <hr className="border-zinc-300" />
<div className="text-center text-sm py-3"> <div className="text-center text-sm py-3">
&copy; 2024 <strong>drawDB</strong> - All right reserved. &copy; 2024 <strong>drawDB</strong> - 保留所有权利
</div> </div>
</div> </div>
); );
@ -331,123 +300,113 @@ const dbs = [
const features = [ const features = [
{ {
title: "Export", title: "导出",
content: ( content: (
<div> <div>
Export the DDL script to run on your database or export the diagram as a 导出 DDL 脚本以在您的数据库中运行或将图表导出为 JSON 或图像
JSON or an image.
</div> </div>
), ),
footer: "", footer: "",
}, },
{ {
title: "Reverse engineer", title: "反向工程",
content: ( content: (
<div> <div>
Already have a schema? Import a DDL script to generate a diagram. 已经有模式了吗导入 DDL 脚本来生成图表
</div> </div>
), ),
footer: "", footer: "",
}, },
{ {
title: "Customizable workspace", title: "可定制的工作区",
content: ( content: (
<div> <div>
Customize the UI to fit your preferences. Select the components you want 自定义界面以符合您的偏好选择您想要在视图中显示的组件
in your view.
</div> </div>
), ),
footer: "", footer: "",
}, },
{ {
title: "Keyboard shortcuts", title: "键盘快捷键",
content: ( content: (
<div> <div>
Speed up development with keyboard shortuts. See all available shortcuts 使用键盘快捷键加快开发速度
<Link <Link
to={`${socials.docs}/shortcuts`} to={`${socials.docs}/shortcuts`}
className="ms-1.5 text-blue-500 hover:underline" className="ms-1.5 text-blue-500 hover:underline"
> >这里</Link>查看所有可用的快捷键
here
</Link>
.
</div> </div>
), ),
footer: "", footer: "",
}, },
{ {
title: "Templates", title: "模板",
content: ( content: (
<div> <div>
Start off with pre-built templates. Get a quick start or get inspirition 使用预建模板开始快速入门或为您的设计获取灵感
for your design.
</div> </div>
), ),
footer: "", footer: "",
}, },
{ {
title: "Custom Templates", title: "自定义模板",
content: ( content: (
<div> <div>
Have boilerplate structures? Save time by saving them as templates and 有模板结构通过保存它们作为模板来节省时间在需要时加载它们
load them when needed.
</div> </div>
), ),
footer: "", footer: "",
}, },
{ {
title: "Robust editor", title: "强大的编辑器",
content: ( content: (
<div> <div>
Undo, redo, copy, paste, duplacate and more. Add tables, subject areas, 撤销重做复制粘贴复制更多添加表主题区域和注释
and notes.
</div> </div>
), ),
footer: "", footer: "",
}, },
{ {
title: "Issue detection", title: "问题检测",
content: ( content: (
<div> <div>
Detect and tackle errors in the diagram to make sure the scripts are 检测并解决图中的错误确保脚本正确
correct.
</div> </div>
), ),
footer: "", footer: "",
}, },
{ {
title: "Relational databases", title: "关系型数据库",
content: ( content: (
<div> <div>
We support 5 relational databases - MySQL, PostgreSQL, SQLite, MariaDB, 我们支持 5 种关系型数据库 - MySQLPostgreSQLSQLiteMariaDBSQL Server
SQL Server.
</div> </div>
), ),
footer: "", footer: "",
}, },
{ {
title: "Object-Relational databases", title: "对象关系型数据库",
content: ( content: (
<div> <div>
Add custom types for object-relational databases, or create custom JSON 为对象关系型数据库添加自定义类型或创建自定义 JSON 方案
schemes.
</div> </div>
), ),
footer: "", footer: "",
}, },
{ {
title: "Presentation mode", title: "演示模式",
content: ( content: (
<div> <div>
Present your diagrams on a big screen during team meetings and 在团队会议和讨论中在大屏幕上展示您的图表
discussions.
</div> </div>
), ),
footer: "", footer: "",
}, },
{ {
title: "Track todos", title: "跟踪待办事项",
content: <div>Keep track of tasks and mark them done when finished.</div>, content: (
<div>用于跟踪任务并在完成时标记为已完成</div>
),
footer: "", footer: "",
}, },
]; ];

View File

@ -48,7 +48,7 @@ export default function Templates() {
/> />
</Link> </Link>
<div className="ms-4 sm:text-sm xl:text-xl text-xl font-semibold"> <div className="ms-4 sm:text-sm xl:text-xl text-xl font-semibold">
Templates 模板
</div> </div>
</div> </div>
</div> </div>
@ -56,16 +56,15 @@ export default function Templates() {
<div className="xl:px-20 sm:px-6 px-12 py-6"> <div className="xl:px-20 sm:px-6 px-12 py-6">
<div className="w-full md:w-[75%] xl:w-[50%] mb-2"> <div className="w-full md:w-[75%] xl:w-[50%] mb-2">
<div className="text-2xl sm:text-lg font-semibold mb-2 text-neutral-800"> <div className="text-2xl sm:text-lg font-semibold mb-2 text-neutral-800">
Database schema templates 数据库模式模板
</div> </div>
<div className="text-sm text-neutral-700"> <div className="text-sm text-neutral-700">
A compilation of database entity relationship diagrams to give you 一个数据库实体关系图的集合帮助你快速开始或启发你的应用程序架构
a quick start or inspire your application&apos;s architecture.
</div> </div>
</div> </div>
<Tabs> <Tabs>
<TabPane <TabPane
tab={<span className="mx-2">Default templates</span>} tab={<span className="mx-2">默认模板</span>}
itemKey="1" itemKey="1"
> >
<div className="grid xl:grid-cols-3 grid-cols-2 sm:grid-cols-1 gap-10 my-6"> <div className="grid xl:grid-cols-3 grid-cols-2 sm:grid-cols-1 gap-10 my-6">
@ -101,7 +100,7 @@ export default function Templates() {
</div> </div>
</TabPane> </TabPane>
<TabPane <TabPane
tab={<span className="mx-2">Your templates</span>} tab={<span className="mx-2">你的模板</span>}
itemKey="2" itemKey="2"
> >
{customTemplates?.length > 0 ? ( {customTemplates?.length > 0 ? (
@ -134,7 +133,7 @@ export default function Templates() {
onClick={() => editTemplate(c.id)} onClick={() => editTemplate(c.id)}
> >
<i className="bi bi-pencil-fill"></i> <i className="bi bi-pencil-fill"></i>
<div className="ms-1.5 font-semibold">Edit</div> <div className="ms-1.5 font-semibold">编辑</div>
</button> </button>
<div className="border-l border-gray-300 mx-2" /> <div className="border-l border-gray-300 mx-2" />
<button <button
@ -142,7 +141,7 @@ export default function Templates() {
onClick={() => deleteTemplate(c.id)} onClick={() => deleteTemplate(c.id)}
> >
<IconDeleteStroked /> <IconDeleteStroked />
<div className="ms-1.5 font-semibold">Delete</div> <div className="ms-1.5 font-semibold">删除</div>
</button> </button>
</div> </div>
</div> </div>
@ -157,7 +156,7 @@ export default function Templates() {
bordered bordered
icon={null} icon={null}
closeIcon={null} closeIcon={null}
description={<div>You have no custom templates saved.</div>} description={<div>您还没有保存自定义模板</div>}
/> />
<div className="grid grid-cols-5 sm:grid-cols-1 gap-4 place-content-center my-4"> <div className="grid grid-cols-5 sm:grid-cols-1 gap-4 place-content-center my-4">
<img <img
@ -166,20 +165,20 @@ export default function Templates() {
/> />
<div className="col-span-2 sm:cols-span-1"> <div className="col-span-2 sm:cols-span-1">
<div className="text-xl font-bold my-4"> <div className="text-xl font-bold my-4">
How to save a template 如何保存模板
</div> </div>
<Steps direction="vertical" style={{ margin: "12px" }}> <Steps direction="vertical" style={{ margin: "12px" }}>
<Steps.Step <Steps.Step
title="Build a diagram" title="建立图表"
description="Build the template in the editor" description="在编辑器中构建模板"
/> />
<Steps.Step <Steps.Step
title="Save as template" title="保存为模板"
description="Editor > File > Save as template" description="编辑 > 文件 > 保存为模板"
/> />
<Steps.Step <Steps.Step
title="Load a template" title="加载一个模板"
description="Fork a template to build on" description="Fork一个模板以进行构建"
/> />
</Steps> </Steps>
</div> </div>

View File

@ -342,8 +342,8 @@ export const template1 = {
notes: [], notes: [],
subjectAreas: [], subjectAreas: [],
types: [], types: [],
title: "Blog database schema", title: "博客数据库模式",
description: description:
"A blog database including tables such as posts, users, comments, and tags to facilitate the storage and retrieval of blog-related information.", "一个博客数据库,包括帖子、用户、评论和标签等表,以方便存储和检索博客相关信息。",
custom: 0, custom: 0,
}; };

View File

@ -346,8 +346,8 @@ export const template2 = {
notes: [], notes: [],
subjectAreas: [], subjectAreas: [],
types: [], types: [],
title: "Human resources schema", title: "人力资源方案",
description: description:
"A Human Resources (HR) schema designed to manage employee and project related information within an organization.", "一个旨在管理组织内员工和项目相关信息的人力资源HR方案。",
custom: 0, custom: 0,
}; };

View File

@ -418,8 +418,8 @@ export const template3 = {
notes: [], notes: [],
subjectAreas: [], subjectAreas: [],
types: [], types: [],
title: "E-commerce schema", title: "电子商务方案",
description: description:
"An e-commerce schema designed to manage various aspects of an online store, including products, orders, and customers.", '一个电子商务架构,用于管理在线商店的各种方面,包括产品、订单和客户。',
custom: 0, custom: 0,
}; };

View File

@ -358,8 +358,8 @@ export const template4 = {
notes: [], notes: [],
subjectAreas: [], subjectAreas: [],
types: [], types: [],
title: "Library schema", title: "图书馆架构",
description: description:
"A library schema designed to manage the books, genres, reservations, and other aspects of a library system", '一个图书馆架构,用于管理书籍、类型、预订以及其他图书馆系统方面的内容。',
custom: 0, custom: 0,
}; };

View File

@ -629,8 +629,8 @@ export const template5 = {
notes: [], notes: [],
subjectAreas: [], subjectAreas: [],
types: [], types: [],
title: "Bank schema", title: "银行方案",
description: description:
"A financial schema designed to manage financial transactions, accounts, customers, and other aspects of financial data.", '一个用于管理金融交易、账户、客户及其他金融数据的金融方案设计。',
custom: 0, custom: 0,
}; };

View File

@ -453,8 +453,8 @@ export const template6 = {
notes: [], notes: [],
subjectAreas: [], subjectAreas: [],
types: [], types: [],
title: "University schema", title: "大学方案",
description: description:
"A university schema designed to manage information about students, courses, instructors, and other aspects of university-related data.", '一个用于管理学生、课程、教师及其他大学相关数据信息的大学模式。',
custom: 0, custom: 0,
}; };

View File

@ -0,0 +1,27 @@
import {
tableColorStripHeight,
tableFieldHeight,
tableHeaderHeight,
} from "../data/constants";
export function arrangeTables(diagram) {
let maxHeight = -1;
const tableWidth = 200;
const gapX = 54;
const gapY = 40;
diagram.tables.forEach((table, i) => {
if (i < diagram.tables.length / 2) {
table.x = i * tableWidth + (i + 1) * gapX;
table.y = gapY;
const height =
table.fields.length * tableFieldHeight +
tableHeaderHeight +
tableColorStripHeight;
maxHeight = Math.max(height, maxHeight);
} else {
const index = diagram.tables.length - i - 1;
table.x = index * tableWidth + (index + 1) * gapX;
table.y = maxHeight + 2 * gapY;
}
});
}

102
src/utils/exportAs/dbml.js Normal file
View File

@ -0,0 +1,102 @@
import { Cardinality } from "../../data/constants";
import { parseDefault } from "../exportSQL/shared";
function hasColumnSettings(field) {
return (
field.primary ||
field.notNull ||
field.increment ||
field.unique ||
(field.comment && field.comment.trim() != "") ||
(field.default && field.default.trim() != "")
);
}
function columnDefault(field, database) {
if (!field.default || field.default.trim() === "") {
return "";
}
return `default: ${parseDefault(field, database)}`;
}
function columnComment(field) {
if (!field.comment || field.comment.trim() === "") {
return "";
}
return `note: '${field.comment}'`;
}
function columnSettings(field, database) {
if (!hasColumnSettings(field)) {
return "";
}
return ` [ ${field.primary ? "pk " : ""}${
field.increment ? "increment " : ""
}${field.notNull ? "not null " : ""}${
field.unique ? "unique " : ""
}${columnDefault(field, database)}${columnComment(field, database)}]`;
}
function cardinality(rel) {
switch (rel.cardinality) {
case Cardinality.ONE_TO_ONE:
return "-";
case Cardinality.ONE_TO_MANY:
return "<";
case Cardinality.MANY_TO_ONE:
return ">";
}
}
export function toDBML(diagram) {
return `${diagram.enums
.map(
(en) =>
`enum ${en.name} {\n${en.values.map((v) => `\t${v}`).join("\n")}\n}\n\n`,
)
.join("\n\n")}${diagram.tables
.map(
(table) =>
`Table ${table.name} {\n${table.fields
.map(
(field) =>
`\t${field.name} ${field.type.toLowerCase()}${columnSettings(
field,
diagram.database,
)}`,
)
.join("\n")}${
table.indices.length > 0
? "\n\n\tindexes {\n" +
table.indices
.map(
(index) =>
`\t\t(${index.fields.join(", ")}) [ name: '${
index.name
}'${index.unique ? " unique" : ""} ]`,
)
.join("\n") +
"\n\t}"
: ""
}${
table.comment && table.comment.trim() !== ""
? `\n\n\tNote: '${table.comment}'`
: ""
}\n}`,
)
.join("\n\n")}\n\n${diagram.relationships
.map(
(rel) =>
`Ref ${rel.name} {\n\t${
diagram.tables[rel.startTableId].name
}.${diagram.tables[rel.startTableId].fields[rel.startFieldId].name} ${cardinality(
rel,
)} ${diagram.tables[rel.endTableId].name}.${
diagram.tables[rel.endTableId].fields[rel.endFieldId].name
} [ delete: ${rel.deleteConstraint.toLowerCase()}, on update: ${rel.updateConstraint.toLowerCase()} ]\n}`,
)
.join("\n\n")}`;
}

View File

@ -0,0 +1,128 @@
import { Parser } from "@dbml/core";
import { arrangeTables } from "../arrangeTables";
import { Cardinality, Constraint } from "../../data/constants";
const parser = new Parser();
export function fromDBML(src) {
const ast = parser.parse(src, "dbml");
const tables = [];
const enums = [];
const relationships = [];
for (const schema of ast.schemas) {
for (const table of schema.tables) {
let parsedTable = {};
parsedTable.id = tables.length;
parsedTable.name = table.name;
parsedTable.comment = table.note ?? "";
parsedTable.color = "#175e7a";
parsedTable.fields = [];
parsedTable.indices = [];
for (const column of table.fields) {
const field = {};
field.id = parsedTable.fields.length;
field.name = column.name;
field.type = column.type.type_name.toUpperCase();
field.default = column.dbdefault ?? "";
field.check = "";
field.primary = !!column.pk;
field.unique = !!column.pk;
field.notNull = !!column.not_null;
field.increment = !!column.increment;
field.comment = column.note ?? "";
parsedTable.fields.push(field);
}
for (const idx of table.indexes) {
const parsedIndex = {};
parsedIndex.id = idx.id - 1;
parsedIndex.fields = idx.columns.map((x) => x.value);
parsedIndex.name =
idx.name ?? `${parsedTable.name}_index_${parsedIndex.id}`;
parsedIndex.unique = !!idx.unique;
parsedTable.indices.push(parsedIndex);
}
tables.push(parsedTable);
}
for (const ref of schema.refs) {
const startTable = ref.endpoints[0].tableName;
const endTable = ref.endpoints[1].tableName;
const startField = ref.endpoints[0].fieldNames[0];
const endField = ref.endpoints[1].fieldNames[0];
const startTableId = tables.findIndex((t) => t.name === startTable);
if (startTableId === -1) continue;
const endTableId = tables.findIndex((t) => t.name === endTable);
if (endTableId === -1) continue;
const endFieldId = tables[endTableId].fields.findIndex(
(f) => f.name === endField,
);
if (endFieldId === -1) continue;
const startFieldId = tables[startTableId].fields.findIndex(
(f) => f.name === startField,
);
if (startFieldId === -1) continue;
const relationship = {};
relationship.name =
"fk_" + startTable + "_" + startField + "_" + endTable;
relationship.startTableId = startTableId;
relationship.endTableId = endTableId;
relationship.endFieldId = endFieldId;
relationship.startFieldId = startFieldId;
relationship.id = relationships.length;
relationship.updateConstraint = ref.onDelete
? ref.onDelete[0].toUpperCase() + ref.onDelete.substring(1)
: Constraint.NONE;
relationship.deleteConstraint = ref.onUpdate
? ref.onUpdate[0].toUpperCase() + ref.onUpdate.substring(1)
: Constraint.NONE;
const startRelation = ref.endpoints[0].relation;
const endRelation = ref.endpoints[1].relation;
if (startRelation === "*" && endRelation === "1") {
relationship.cardinality = Cardinality.MANY_TO_ONE;
}
if (startRelation === "1" && endRelation === "*") {
relationship.cardinality = Cardinality.ONE_TO_MANY;
}
if (startRelation === "1" && endRelation === "1") {
relationship.cardinality = Cardinality.ONE_TO_ONE;
}
relationships.push(relationship);
}
for (const schemaEnum of schema.enums) {
const parsedEnum = {};
parsedEnum.name = schemaEnum.name;
parsedEnum.values = schemaEnum.values.map((x) => x.name);
enums.push(parsedEnum);
}
}
const diagram = { tables, enums, relationships };
arrangeTables(diagram);
return diagram;
}

View File

@ -1,9 +1,5 @@
import { import { DB } from "../../data/constants";
DB, import { arrangeTables } from "../arrangeTables";
tableColorStripHeight,
tableFieldHeight,
tableHeaderHeight,
} from "../../data/constants";
import { fromMariaDB } from "./mariadb"; import { fromMariaDB } from "./mariadb";
import { fromMSSQL } from "./mssql"; import { fromMSSQL } from "./mssql";
import { fromMySQL } from "./mysql"; import { fromMySQL } from "./mysql";
@ -33,25 +29,7 @@ export function importSQL(ast, toDb = DB.MYSQL, diagramDb = DB.GENERIC) {
break; break;
} }
let maxHeight = -1; arrangeTables(diagram);
const tableWidth = 200;
const gapX = 54;
const gapY = 40;
diagram.tables.forEach((table, i) => {
if (i < diagram.tables.length / 2) {
table.x = i * tableWidth + (i + 1) * gapX;
table.y = gapY;
const height =
table.fields.length * tableFieldHeight +
tableHeaderHeight +
tableColorStripHeight;
maxHeight = Math.max(height, maxHeight);
} else {
const index = diagram.tables.length - i - 1;
table.x = index * tableWidth + (index + 1) * gapX;
table.y = maxHeight + 2 * gapY;
}
});
return diagram; return diagram;
} }