Add Multi language support

This commit is contained in:
KarimTamani
2025-07-21 19:03:06 +01:00
parent ba81bab88c
commit 04875a1e43
18 changed files with 2250 additions and 371 deletions
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

+5 -5
View File
@@ -4,14 +4,14 @@
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + HeroUI</title>
<meta key="title" content="Vite + HeroUI" property="og:title" />
<title>StackRender Studio</title>
<meta key="title" content="StackRender Studio" property="og:title" />
<meta
content="Make beautiful websites regardless of your design experience."
content="StackRender is an AI-powered tool that helps you design and edit database diagrams effortlessly with a smooth, beautiful UI. Generate clean SQL DDL for PostgreSQL, MySQL, MariaDB, and SQLite in seconds."
property="og:description"
/>
<meta
content="Make beautiful websites regardless of your design experience."
content="StackRender is an AI-powered tool that helps you design and edit database diagrams effortlessly with a smooth, beautiful UI. Generate clean SQL DDL for PostgreSQL, MySQL, MariaDB, and SQLite in seconds."
name="description"
/>
<meta
@@ -19,7 +19,7 @@
content="viewport-fit=cover, width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
name="viewport"
/>
<link href="/favicon.ico" rel="icon" />
<link href="/favicon.png" rel="icon" sizes="32x32" />
</head>
<body>
<div id="root"></div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

-153
View File
@@ -1,153 +0,0 @@
import { usePowerSync } from "@powersync/react";
import { Wifi, WifiOff } from "lucide-react";
import { useEffect, useMemo, useRef, useState } from "react";
import { Tooltip, TooltipContent, TooltipTrigger } from "../tooltip/tooltip";
import { addToast, cn, Divider, Progress } from "@heroui/react";
import { differenceInHours, differenceInMinutes } from "date-fns";
import { useTranslation } from "react-i18next";
const ConnectionStatus: React.FC = () => {
const powerSync = usePowerSync();
const [syncStatus, setSyncStatus] = useState(powerSync.currentStatus);
const [downloadProgress, setDownloadProgress] = useState<number | undefined>(undefined);
const clearProgressHandler: any = useRef(undefined);
const { t } = useTranslation();
const [lastUploadAt, setLastUploadAt] = useState<Date | undefined>(() => {
const last_upload_at = localStorage.getItem("last_upload_at");
if (last_upload_at)
return new Date(last_upload_at);
return undefined;
})
useEffect(() => {
const getLastUploadAtValue = () => {
const last_upload_at = localStorage.getItem("last_upload_at");
if (last_upload_at)
setLastUploadAt(new Date(last_upload_at));
}
window.addEventListener("storage", getLastUploadAtValue);
return () => {
window.removeEventListener('storage', getLastUploadAtValue);
}
}, [])
useEffect(() => {
const l = powerSync.registerListener({
statusChanged: (status) => {
setSyncStatus(status);
},
});
return () => l?.();
}, [powerSync]);
useEffect(() => {
if (syncStatus.downloadProgress?.downloadedOperations && syncStatus.downloadProgress?.totalOperations) {
const progress: number = Math.round(syncStatus.downloadProgress.downloadedOperations / syncStatus.downloadProgress.totalOperations * 100);
if (progress <= 100) {
setDownloadProgress(progress);
}
if (downloadProgress == 100 && !clearProgressHandler.current) {
clearProgressHandler.current = setTimeout(() => {
setDownloadProgress(undefined);
clearProgressHandler.current = undefined;
}, 700)
}
}
}, [syncStatus.downloadProgress])
const deltaUploadTime = useMemo(() => {
if (lastUploadAt) {
const currentDate = new Date();
const minutes = differenceInMinutes(currentDate, lastUploadAt)
const hours = differenceInHours(currentDate, lastUploadAt);
if (hours > 0 && hours < 24) {
return `${hours} ${t("connection_status.hour_ago")}`
}
if (minutes > 0 && minutes < 60)
return `${minutes} ${t("connection_status.min_ago")}`
if (hours > 24) {
return `${lastUploadAt.toLocaleDateString()}`
}
}
return t("connection_status.just_now") ;
}, [lastUploadAt , t]);
const lastSyncedDate: string | undefined = useMemo(() => {
return syncStatus.lastSyncedAt ? syncStatus.lastSyncedAt.toLocaleString("en-US") : undefined;
}, [syncStatus.lastSyncedAt]);
return (
<div className="flex items-center ">
<Tooltip>
<TooltipTrigger asChild>
<div className="border-1 flex gap-2 p-2 px-3 rounded-sm text-xs relative overflow-hidden border-divider dark:border-font/10">
<span className={cn("flex gap-2 font-semibold", syncStatus.connected ? "text-success" : "text-danger")}>
{
syncStatus.connected ?
<Wifi className="size-4 " /> :
<WifiOff className="size-4 " />
}
{
syncStatus.connected ? t("connection_status.online") : t("connection_status.offline")
}
</span>
<Divider orientation="vertical" className="h-4" />
{
downloadProgress !== undefined ?
<>
<span className="text-font/90 w-[96px] truncate">
{t("connection_status.saving")} ...
</span>
<Progress
classNames={{
base: "max-w-md absolute bottom-[-2px] left-0 w-full rounded-sm",
track: " bg-transparent",
indicator: "bg-gradient-to-r from-secondary-100 to-primary ",
}}
radius="sm"
aria-label="upload progress"
showValueLabel={false}
size="sm"
value={downloadProgress}
/>
</>
:
<span className="text-font/90 truncate font-semibold" >
{t("connection_status.saved")} {deltaUploadTime}
</span>
}
</div>
</TooltipTrigger>
{
lastSyncedDate &&
<TooltipContent >
{t("connection_status.last_synced")} : {lastSyncedDate}
</TooltipContent>
}
</Tooltip>
</div>
)
}
export default ConnectionStatus;
@@ -0,0 +1,108 @@
import { languages } from "@/i18";
import { Language } from "@/i18/types";
import { Button, Input, Listbox, ListboxItem, Popover, PopoverContent, PopoverTrigger } from "@heroui/react";
import { Check, Languages, Search } from "lucide-react";
import React, { Ref, useCallback, useEffect, useMemo, useRef, useState } from "react";
import { useTranslation } from "react-i18next";
const LanguagesDropDonw: React.FC = ({ }) => {
const { t, i18n } = useTranslation();
const [currentLanguage, setCurrentLanguage] = useState<Language>(() => languages.find((language: Language) => language.code == i18n.language) as Language);
const [languageList, setLanguageList] = useState<Language[]>(languages);
const searchRef: Ref<HTMLInputElement> = useRef<HTMLInputElement>(null);
const changeLanguage = useCallback((language: Language) => {
i18n.changeLanguage(language.code);
}, [i18n])
useEffect(() => {
setCurrentLanguage(languages.find((language: Language) => language.code == i18n.language) as Language)
}, [i18n.language])
const searchLanguage = () => {
if (!searchRef.current?.value || searchRef.current?.value.trim().length == 0) {
setLanguageList(languages);
}else
setLanguageList(languages.filter((language: Language) =>
language.code.toLowerCase().includes(searchRef.current?.value.toLowerCase() as string) ||
language.name.toLowerCase().includes(searchRef.current?.value.toLowerCase() as string) ||
language.nativeName.toLowerCase().includes(searchRef.current?.value.toLowerCase() as string)
))
console.log(searchRef.current?.value);
}
const openChange = useCallback((isOpen : boolean) => {
if (isOpen)
setLanguageList(languages)
} , [])
return (
<Popover showArrow placement="bottom" radius="sm" shadow="sm" onOpenChange={openChange}>
<PopoverTrigger>
<Button
variant="bordered"
radius="sm"
startContent={
<Languages className="size-4 text-font/90 dark:text-white" />
}
className="p-0 h-9 min-w-[142px] border-1 border-divider dark:border-font/10 text-xs bg-transparent hover:bg-default text-font/90 font-semibold "
>
<span>
{currentLanguage.nativeName} <span className="text-font/70">({currentLanguage.name})</span>
</span>
</Button>
</PopoverTrigger>
<PopoverContent className="p-2">
<Input
variant="flat"
size="sm"
aria-label={t("navbar.search")}
placeholder={`${t("navbar.search")}`}
ref={searchRef}
onKeyUp={searchLanguage}
startContent={
<Search className="size-4 text-icon" />
}
className="h-8 w-full focus-visible:ring-0 shadow-none "
classNames={{
inputWrapper: "dark:bg-default border-divider group-hover:border-primary group-data-[focus=true]:border-primary group-data-[focus=true]:bg-default",
}}
/>
<hr className="my-2 w-full border-divider" />
<Listbox aria-label="Languages"
>
{
languageList.map((language: Language) => (
<ListboxItem
key={language.code}
textValue={language.code}
endContent={
currentLanguage.code == language.code && <Check className="text-icon size-4" />
}
onPressEnd={() => changeLanguage(language)}
className="text-font/90"
>
{language.nativeName} <span className="text-font/70"> ({language.name})</span>
</ListboxItem>
))
}
</Listbox>
</PopoverContent>
</Popover>
)
}
export default React.memo(LanguagesDropDonw);
+12 -12
View File
@@ -1,20 +1,13 @@
import { useDatabase } from "@/providers/database-provider/database-provider";
import Menu from "../menu/menu";
import ConnectionStatus from "./connection-status";
import RenameDatabase from "./rename-database";
interface Props {
}
import LanguagesDropdown from "./languages-dropdown";
const Navbar: React.FC<Props> = ({ }) => {
const Navbar: React.FC = ({ }) => {
const { database } = useDatabase();
return (
<nav className="h-12 fixed z-50 bg-background w-full flex items-center p-4 border-b border-divider ">
<img
src={`/stackrender.png`}
@@ -23,13 +16,20 @@ const Navbar: React.FC<Props> = ({ }) => {
/>
<h3 className="font-semibold ml-2 text-slate-900 text-sm dark:text-white">StackRender</h3>
<div className="ml-4 w-full">
<div className="flex w-full justify-between items-center">
<div className="flex w-full justify-between items-center gap-2">
<Menu />
<div className=" w-full h-full flex items-center justify-center">
{database && <RenameDatabase database={database} />}
</div>
<ConnectionStatus />
<a className="gh-button text-font font-medium bg-background text-xs p-4 px-2 pr-2.5 flex justif-center items-center"
target="_blank"
href="https://github.com/KarimTamani/stackrender">
<span className="gh-button__icon"></span>
</a>
<LanguagesDropdown/>
</div>
</div>
</nav>
+31 -7
View File
@@ -1,26 +1,50 @@
import { en, enLanguage } from "./languages/en";
import { fr, frLanguage } from "./languages/fr";
import { Language } from "./types";
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import LanguageDetector from 'i18next-browser-languagedetector';
import { en, enLanguage } from "./languages/en";
import { fr, frLanguage } from "./languages/fr";
import { ar, arLanguage } from "./languages/ar";
import { es, esLanguage } from "./languages/es";
import { zh, zhLanguage } from "./languages/zh";
import { hi, hiLanguage } from "./languages/hi";
import { pt, ptLanguage } from "./languages/pt";
import { ru, ruLanguage } from "./languages/ru";
import { de, deLanguage } from "./languages/de";
export const languages: Language[] = [
enLanguage,
frLanguage ,
arLanguage
frLanguage,
arLanguage,
esLanguage,
zhLanguage,
hiLanguage,
ptLanguage,
ruLanguage,
deLanguage,
];
const resources = {
en,
fr,
ar
ar,
es,
zh,
hi,
pt,
ru,
de,
};
i18n.use(LanguageDetector)
.use(initReactI18next)
.init({
resources ,
lng: 'en',
resources,
lng: 'en',
interpolation: {
escapeValue: false,
+243 -132
View File
@@ -1,140 +1,251 @@
import { Language } from "../types";
export const ar = {
translation: {
sidebar: {
tables: "الجداول",
relationships: "العلاقات"
},
modal: {
close: "إغلاق",
create: "إنشاء"
},
color_picker: {
default_color: "اللون الافتراضي"
},
db_controller: {
filter: "تصفية",
add_table: "إضافة جدول",
add_field: "إضافة حقل",
add_index: "إضافة فهرس",
add_relationship: "إضافة علاقة",
show_code: "عرض الكود",
fields: "الحقول",
indexes: "الفهارس",
note: "ملاحظة",
name: "الاسم",
type: "النوع",
nullable: "يمكن أن يكون فارغًا",
select_fields: "اختر الحقول",
unique: "فريد",
table_note: "ملاحظة الجدول",
collapse: "طي الكل",
primary_key: "المفتاح الأساسي",
foreign_key: "المفتاح الخارجي",
source_table: "جدول المصدر",
target_table: "جدول الهدف",
select_table: "اختر الجدول",
select_field: "اختر الحقل",
cardinality: {
name: "التعددية",
one_to_one: "واحد إلى واحد",
one_to_many: "واحد إلى متعدد",
many_to_one: "متعدد إلى واحد",
many_to_many: "متعدد إلى متعدد"
},
delete: "حذف",
field_setting: "إعدادات الحقل",
table_actions: "إجراءات الحقل",
actions: "إجراءات",
field_note: "ملاحظة الحقل",
delete_field: "حذف الحقل",
create_relationship: "إنشاء علاقة",
relationship_error: إنشاء علاقة، يجب أن يكون نوع مفتاح المصدر ونوع المفتاح المرجعي متماثلين.",
invalid_relationship: {
title: "علاقة غير صالحة",
description: "نوع مفتاح المصدر لا يتطابق مع نوع المفتاح المرجعي. يرجى التأكد من أن كلا المفتاحين لهما نفس نوع البيانات."
}
},
table: {
double_click: "انقر مزدوجًا للتعديل",
overlapping_tables: "الجداول المتداخلة",
},
control_buttons: {
redo: "إعادة",
undo: "تراجع",
zoom_in: "تكبير",
zoom_out: "تصغير",
adjust_positions: "تعديل المواقع",
show_all: "عرض الكل"
},
menu: {
file: "ملف",
new: "جديد",
open: "فتح",
save: "حفظ",
import: "استيراد",
json: ".json",
dbml: ".dbml",
mysql: "MySql",
postgresql: "Postgresql",
export_sql: "تصدير SQL",
generic: "عام",
export_orm_models: "تصدير ORM Models",
delete_project: "حذف المشروع",
edit: "تحرير",
undo: "تراجع",
redo: "إعادة",
clear: "مسح",
view: "عرض",
hide_controller: "إخفاء المتحكم",
zoom_on_scroll: "التكبير عند التمرير",
on: "تشغيل",
off: "إيقاف",
theme: "الثيم",
light: "فاتح",
dark: "داكن",
help: "مساعدة",
show_docs: "عرض المستندات",
join_discord: "الانضمام إلى ديسكورد"
},
connection_status: {
online: "متصل",
offline: "غير متصل",
saving: "جارٍ الحفظ",
saved: "تم الحفظ",
last_synced: "آخر مزامنة"
},
import: {
instructions: "التعليمات",
install: "التثبيت",
run_command: "قم بتشغيل الأمر التالي في الطرفية.",
example: "مثال",
copy_code: "انسخ محتوى ملف .sql إلى قسم الكود أدناه.",
pg_admin: {
step1: "افتح <bold>Pg Admin</bold>.",
step2: "انقر بزر الفأرة الأيمن على قاعدة البيانات واختر <bold>Backup</bold> من القائمة السياقية.",
step3: "قم بتسمية ملف <code>.sql</code>، ثم اختر التنسيق <bold>Plain</bold>، وحدد <bold>Encoding: UTF8</bold>.",
step4: "تأكد من أن <bold>Only schema</bold> محددة، و<bold>Only data</bold> غير محددة، وذلك في علامة تبويب <bold>Data Options</bold>.",
step5: "انقر على <bold>Backup</bold> لتصدير الملف، ثم انسخ محتواه إلى قسم محرر الكود أدناه."
},
workbench: {
step1: "افتح <bold>MySQL Workbench</bold> و<bold>اتصل</bold> بخادم MySQL الخاص بك.",
step2: "من القائمة العلوية، انتقل إلى <bold>Server &gt; Data Export</bold>.",
step3: "في قسم <bold>خيارات التصدير</bold>، اختر <bold>Dump Structure Only</bold>.",
step4: "حدد <bold>Export to Self-Contained File</bold>، ثم اختر مكان الحفظ واسم ملف الإخراج <code>.sql</code>.",
step5: "انقر على <bold>Start Export</bold> لبدء عملية التصدير، ثم انسخ محتوى الملف إلى قسم محرر الكود أدناه."
}
translation: {
sidebar: {
tables: "الجداول",
relationships: "العلاقات"
},
color_picker: {
default_color: "اللون الافتراضي"
},
navbar: {
rename_db: "إعادة تسمية قاعدة البيانات",
search: "بحث"
},
db_controller: {
filter: "تصفية",
add_table: "إضافة جدول",
add_field: "إضافة حقل",
add_index: "إضافة فهرس",
delete_table: "حذف الجدول",
duplicate: "تكرار",
add_relationship: "إضافة علاقة",
show_code: "عرض الكود",
fields: "الحقول",
indexes: "الفهارس",
note: "ملاحظة",
name: "الاسم",
type: "النوع",
nullable: "يسمح بالقيمة الفارغة",
select_fields: "اختر الحقول",
unique: "فريد",
table_note: "ملاحظة الجدول",
collapse: "طي الكل",
primary_key: "المفتاح الأساسي",
foreign_key: "المفتاح الخارجي",
source_table: "الجدول المصدر",
referenced_table: "الجدول المشار إليه",
select_table: "اختر جدولًا",
select_field: "اختر حقلًا",
empty_list: {
no_tables: "لا توجد جداول",
no_tables_description: "أنشئ جدولًا للبدء.",
no_relationships: "لا توجد علاقات",
no_relationships_description: "أنشئ علاقات لربط جدولين"
},
cardinality: {
name: "القرينة",
one_to_one: "واحد إلى واحد",
one_to_many: "واحد إلى متعدد",
many_to_one: "متعدد إلى واحد",
many_to_many: "متعدد إلى متعدد"
},
foreign_key_actions: {
title: "إجراءات المفتاح الخارجي",
on_delete: "عند الحذف",
on_update: "عند التحديث",
actions: {
no_action: ا إجراء",
cascade: "تسلسل",
set_null: "تعيين كـ Null",
set_default: "تعيين كافتراضي",
restrict: "تقييد"
}
},
field_settings: {
title: "إعدادات الحقل",
unique: "فريد",
unsigned: "بدون إشارة",
numeric_setting: "إعداد رقمي",
decimal_setting: "إعداد عشري",
zeroFill: "تعبئة بالأصفار",
autoIncrement: "زيادة تلقائية",
note: "ملاحظة",
delete_field: "حذف الحقل",
field_note: "ملاحظة الحقل",
precision: "الدقة",
text_setting: "إعداد النص",
charset: "ترميز الحروف",
collation: "التجميع",
scale: "المقياس",
max_length: "الطول الأقصى",
integer_width: "عرض العدد الصحيح",
width: "العرض",
default_value: "القيمة الافتراضية",
value: "القيمة",
length: "الطول",
values: "القيم",
type_enter: "اكتب واضغط Enter",
precision_def: "إجمالي الأرقام المسموحة (قبل + بعد الفاصلة).",
scale_def: "عدد الأرقام بعد الفاصلة.",
time_default_value: {
no_value: "لا توجد قيمة",
custom: "وقت مخصص",
now: "الآن"
},
errors: {
max_length: "يجب أن يكون عددًا موجبًا بدون فواصل عشرية.",
integer_default_value: "قيمة افتراضية غير صالحة لعدد صحيح",
precision: "يجب أن تكون الدقة عددًا موجبًا بدون فواصل عشرية.",
scale: "يجب أن يكون المقياس عددًا موجبًا بدون فواصل عشرية.",
scale_max_value: "يجب أن يكون المقياس ≤ الدقة."
},
pick_value: "اختر قيمة"
},
delete: "حذف",
index_setting: "إعدادات الفهرس",
table_actions: "إجراءات الجدول",
actions: "إجراءات",
delete_index: "حذف الفهرس",
index_name: "اسم الفهرس",
create_relationship: "إنشاء علاقة",
relationship_error: "لإنشاء علاقة، يجب أن يكون المفتاح الأساسي والمفتاح الخارجي من نفس النوع.",
invalid_relationship: {
title: "علاقة غير صالحة",
description: "نوع مفتاح المصدر لا يتطابق مع نوع المفتاح المشار إليه. تأكد من أن كليهما من نفس نوع البيانات."
},
circular_dependency: {
title: "تم الكشف عن تبعية دائرية",
toast_description: "تم العثور على مرجع دائري بين الجداول. تحقق من المخطط على اليسار وقم بإزالة إحدى العلاقات لإصلاح ذلك.",
description: "يحتوي المخطط الخاص بك على علاقة مفتاح خارجي دائرية بين الجداول. لإصلاحها،",
suggestion: "قم بإزالة إحدى العلاقات أدناه التي تسبب الدورة.",
remove_relationship: "إزالة العلاقة"
}
},
table: {
double_click: "انقر مرتين للتعديل",
overlapping_tables: "جداول متداخلة",
show_more: "عرض المزيد",
show_less: "عرض أقل"
},
control_buttons: {
redo: "إعادة",
undo: "تراجع",
zoom_in: "تكبير",
zoom_out: "تصغير",
adjust_positions: "ضبط المواقع",
show_all: "عرض الكل"
},
menu: {
file: "ملف",
new: "جديد",
open: "فتح",
save: "حفظ",
import: "استيراد",
json: ".json",
dbml: ".dbml",
mysql: "MySQL",
postgresql: "PostgreSQL",
export_sql: "تصدير SQL",
generic: "عام",
export_orm_models: "تصدير نماذج ORM",
delete_project: "حذف المشروع",
edit: "تعديل",
undo: "تراجع",
redo: "إعادة",
clear: "مسح",
view: "عرض",
hide_controller: "إخفاء لوحة التحكم",
show_controller: "عرض لوحة التحكم",
cardinality_style: "نمط القرينة",
hidden: "مخفي",
numeric: "رقمي",
symbolic: "رمزي",
theme: "الثيم",
light: "فاتح",
dark: "داكن",
help: "مساعدة",
show_docs: "عرض المستندات",
join_discord: "انضم إلى Discord"
},
modals: {
close: "إغلاق",
create: "إنشاء",
pick_database: "اختر قاعدة البيانات الخاصة بك.",
create_database_header: "كل قاعدة بيانات تقدم ميزات مختلفة.",
db_name: "اسم قاعدة البيانات",
db_name_error: "يرجى إدخال اسم قاعدة البيانات",
continue: "متابعة",
open: "فتح",
open_database: "فتح قاعدة بيانات",
open_database_header: "افتح قاعدة بيانات عن طريق اختيار واحدة من القائمة.",
delete_database: "حذف قاعدة البيانات",
delete_database_content: "هذا الإجراء لا يمكن التراجع عنه وسيمسح المخطط نهائيًا.",
delete: "حذف",
import_database: {
title: "استيراد قاعدة البيانات",
import: "استيراد",
import_options: "هل ترغب في الاستيراد باستخدام:",
import_error: "خطأ في تحليل SQL",
import_error_description: "تعذر استيراد SQL الخاص بك بسبب وجود صيغة غير صحيحة.",
import_warning: "تحذير تحليل SQL",
import_warning_description: "بعض العناصر لم يتم معالجتها بسبب تصريحات غير مدعومة أو غير مكتملة."
},
export_sql: "تصدير SQL",
export_sql_header: "تصدير مخطط قاعدة البيانات على شكل كود SQL"
},
clipboard: {
copy: "نسخ",
copied: "تم النسخ"
},
connection_status: {
online: "متصل",
offline: "غير متصل",
saving: "يتم الحفظ...",
saved: "تم الحفظ",
last_synced: "آخر مزامنة",
min_ago: "دقيقة مضت",
hour_ago: "ساعة مضت",
just_now: "الآن"
},
import: {
instructions: "التعليمات",
install: "تثبيت",
run_command: "قم بتشغيل الأمر التالي في الطرفية:",
example: "مثال",
copy_code: "انسخ محتوى ملف .sql إلى محرر الكود أدناه.",
pg_admin: {
step1: "افتح <bold>Pg Admin</bold>.",
step2: "انقر بزر الماوس الأيمن على قاعدة البيانات واختر <bold>Backup</bold>.",
step3: "قم بتسمية ملف <code>.sql</code>، حدد Format إلى <bold>Plain</bold>، واختر <bold>Encoding: UTF8.</bold>",
step4: "تأكد من تحديد <bold>Only schema</bold> وإلغاء تحديد <bold>Only data</bold> في <bold>علامة تبويب خيارات البيانات</bold>.",
step5: "اضغط <bold>Backup</bold> لتصدير الملف، ثم انسخ محتواه إلى محرر الكود أدناه."
},
workbench: {
step1: "افتح <bold>MySQL Workbench</bold> واتصل بخادم MySQL الخاص بك.",
step2: "من القائمة العلوية، اذهب إلى <bold>Server > Data Export</bold>.",
step3: "في <bold>خيارات التصدير</bold>، اختر <bold>Dump Structure Only</bold>.",
step4: "حدد <bold>Export to Self-Contained File</bold>، ثم اختر مكانًا واسمًا لملف <code>.sql</code>.",
step5: "اضغط على <bold>Start Export</bold>، ثم انسخ محتوى الملف إلى محرر الكود أدناه."
},
heidisql: {
step1: "<bold>افتح HeidiSQL</bold> واتصل بالخادم.",
step2: "في <bold>الشريط الجانبي الأيسر</bold>، انقر بزر الماوس الأيمن على قاعدة البيانات التي تريد تصديرها.",
step3: "اختر <bold>Export database as SQL</bold>.",
step4: "حدد <bold>No data</bold> وتأكد من تحديد <bold>Create</bold> لتصدير البنية فقط.",
step5: "انقر على <bold>Export</bold>، ثم انسخ محتوى ملف <code>.sql</code> إلى محرر الكود."
},
dbbrowser: {
step1: "شغل <bold>DB Browser for SQLite</bold>.",
step2: "اذهب إلى <bold>File > Open Database</bold> واختر ملف <code>.sqlite</code> أو <code>.db</code>.",
step3: "من القائمة، اختر <bold>File > Export > Database to SQL file</bold>.",
step4: "في النافذة، اختر <bold>Export schema only</bold> ثم انقر <bold>Save</bold>.",
step5: "أخيرًا، انسخ محتوى ملف <code>.sql</code> إلى محرر الكود أدناه."
}
}
};
}
}
export const arLanguage: Language = {
name: 'Arabic',
+254
View File
@@ -0,0 +1,254 @@
import { Language } from "../types";
export const de = {
translation: {
sidebar: {
tables: "Tabellen",
relationships: "Beziehungen"
},
color_picker: {
default_color: "Standardfarbe"
},
navbar: {
rename_db: "Datenbank umbenennen",
search: "Suchen"
},
db_controller: {
filter: "Filter",
add_table: "Tabelle hinzufügen",
add_field: "Feld hinzufügen",
add_index: "Index hinzufügen",
delete_table: "Tabelle löschen",
duplicate: "Duplizieren",
add_relationship: "Beziehung hinzufügen",
show_code: "Code anzeigen",
fields: "Felder",
indexes: "Indizes",
note: "Notiz",
name: "Name",
type: "Typ",
nullable: "Nullwert zulässig",
select_fields: "Felder auswählen",
unique: "Eindeutig",
table_note: "Tabellennotiz",
collapse: "Alle einklappen",
primary_key: "Primärschlüssel",
foreign_key: "Fremdschlüssel",
source_table: "Quelltabelle",
referenced_table: "Referenzierte Tabelle",
select_table: "Tabelle auswählen",
select_field: "Feld auswählen",
empty_list: {
no_tables: "Keine Tabellen",
no_tables_description: "Erstelle eine Tabelle, um zu beginnen.",
no_relationships: "Keine Beziehungen",
no_relationships_description: "Erstelle Beziehungen, um zwei Tabellen zu verbinden"
},
cardinality: {
name: "Kardinalität",
one_to_one: "Eins zu eins",
one_to_many: "Eins zu viele",
many_to_one: "Viele zu eins",
many_to_many: "Viele zu viele"
},
foreign_key_actions: {
title: "Fremdschlüssel-Aktionen",
on_delete: "Beim Löschen",
on_update: "Beim Aktualisieren",
actions: {
no_action: "Keine Aktion",
cascade: "Kaskadieren",
set_null: "Auf Null setzen",
set_default: "Standardwert setzen",
restrict: "Einschränken"
}
},
field_settings: {
title: "Feld-Einstellungen",
unique: "Eindeutig",
unsigned: "Ohne Vorzeichen",
numeric_setting: "Numerische Einstellung",
decimal_setting: "Dezimaleinstellung",
zeroFill: "Mit Nullen auffüllen",
autoIncrement: "Automatische Erhöhung",
note: "Notiz",
delete_field: "Feld löschen",
field_note: "Feldnotiz",
precision: "Genauigkeit",
text_setting: "Texteinstellung",
charset: "Zeichensatz",
collation: "Sortierung",
scale: "Skalierung",
max_length: "Maximale Länge",
integer_width: "Ganzzahlbreite",
width: "Breite",
default_value: "Standardwert",
value: "Wert",
length: "Länge",
values: "Werte",
type_enter: "Tippen und Enter drücken",
precision_def: "Zulässige Gesamtanzahl an Ziffern (vor + nach dem Dezimalpunkt).",
scale_def: "Ziffern nach dem Dezimalpunkt.",
time_default_value: {
no_value: "Kein Wert",
custom: "Benutzerdefinierte Zeit",
now: "Jetzt"
},
errors: {
max_length: "muss eine positive Zahl ohne Dezimalstellen sein.",
integer_default_value: "Ungültiger Standardwert für Ganzzahl",
precision: "Genauigkeit muss eine positive Zahl ohne Dezimalstellen sein.",
scale: "Skalierung muss eine positive Zahl ohne Dezimalstellen sein.",
scale_max_value: "Skalierung muss ≤ Genauigkeit sein."
},
pick_value: "Wert auswählen"
},
delete: "Löschen",
index_setting: "Index-Einstellungen",
table_actions: "Tabellenaktionen",
actions: "Aktionen",
delete_index: "Index löschen",
index_name: "Indexname",
create_relationship: "Beziehung erstellen",
relationship_error: "Um eine Beziehung zu erstellen, müssen Primär- und Fremdschlüssel denselben Typ haben.",
invalid_relationship: {
title: "Ungültige Beziehung",
description: "Der Typ des Quellschlüssels stimmt nicht mit dem des referenzierten Schlüssels überein. Bitte stelle sicher, dass beide den gleichen Datentyp haben."
},
circular_dependency: {
title: "Zirkuläre Abhängigkeit erkannt",
toast_description: "Eine zirkuläre Referenz zwischen Tabellen wurde gefunden. Überprüfe das Diagramm links und entferne eine der Beziehungen.",
description: "Dein Schema enthält eine zirkuläre Fremdschlüssel-Beziehung zwischen Tabellen. Um dies zu beheben,",
suggestion: "entferne eine der unten aufgeführten Beziehungen, die den Kreis verursachen.",
remove_relationship: "Beziehung entfernen"
}
},
table: {
double_click: "Doppelklick zum Bearbeiten",
overlapping_tables: "Überlappende Tabellen",
show_more: "Mehr anzeigen",
show_less: "Weniger anzeigen"
},
control_buttons: {
redo: "Wiederholen",
undo: "Rückgängig",
zoom_in: "Vergrößern",
zoom_out: "Verkleinern",
adjust_positions: "Positionen anpassen",
show_all: "Alles anzeigen"
},
menu: {
file: "Datei",
new: "Neu",
open: "Öffnen",
save: "Speichern",
import: "Importieren",
json: ".json",
dbml: ".dbml",
mysql: "MySQL",
postgresql: "PostgreSQL",
export_sql: "SQL exportieren",
generic: "Allgemein",
export_orm_models: "ORM-Modelle exportieren",
delete_project: "Projekt löschen",
edit: "Bearbeiten",
undo: "Rückgängig",
redo: "Wiederholen",
clear: "Leeren",
view: "Ansicht",
hide_controller: "Controller ausblenden",
show_controller: "Controller anzeigen",
cardinality_style: "Kardinalitätsstil",
hidden: "Versteckt",
numeric: "Numerisch",
symbolic: "Symbolisch",
theme: "Design",
light: "Hell",
dark: "Dunkel",
help: "Hilfe",
show_docs: "Dokumentation anzeigen",
join_discord: "Discord beitreten"
},
modals: {
close: "Schließen",
create: "Erstellen",
pick_database: "Wähle deine Datenbank.",
create_database_header: "Jede Datenbank bietet unterschiedliche Funktionen.",
db_name: "Datenbankname",
db_name_error: "Bitte gib einen Datenbanknamen ein",
continue: "Weiter",
open: "Öffnen",
open_database: "Datenbank öffnen",
open_database_header: "Wähle eine Datenbank aus der Liste aus.",
delete_database: "Datenbank löschen",
delete_database_content: "Diese Aktion ist unwiderruflich und wird das Diagramm dauerhaft löschen.",
delete: "Löschen",
import_database: {
title: "Datenbank importieren",
import: "Importieren",
import_options: "Möchtest du importieren mit:",
import_error: "SQL-Parsing-Fehler",
import_error_description: "Wir konnten dein SQL nicht importieren, da es ungültige Syntax enthält.",
import_warning: "SQL-Parsing-Warnung",
import_warning_description: "Einige Elemente konnten aufgrund nicht unterstützter oder unvollständiger Deklarationen nicht verarbeitet werden."
},
export_sql: "SQL exportieren",
export_sql_header: "Exportiere dein Datenbankdiagramm als SQL-Code"
},
clipboard: {
copy: "Kopieren",
copied: "Kopiert"
},
connection_status: {
online: "Online",
offline: "Offline",
saving: "Speichern...",
saved: "Gespeichert",
last_synced: "Zuletzt synchronisiert",
min_ago: "Min. zuvor",
hour_ago: "Std. zuvor",
just_now: "Gerade eben"
},
import: {
instructions: "Anleitung",
install: "Installieren",
run_command: "Führe den folgenden Befehl im Terminal aus.",
example: "Beispiel",
copy_code: "Kopiere den Inhalt der .sql-Datei in den Code-Editor unten.",
pg_admin: {
step1: "Öffne <bold>Pg Admin</bold>.",
step2: "Rechtsklicke auf deine Datenbank und wähle <bold>Backup</bold>.",
step3: "Benenne deine <code>.sql</code>-Datei, stelle Format auf <bold>Plain</bold> und wähle <bold>Encoding: UTF8</bold>.",
step4: "Stelle sicher, dass <bold>Only schema</bold> aktiviert und <bold>Only data</bold> deaktiviert ist.",
step5: "Klicke auf <bold>Backup</bold>, um die Datei zu exportieren, und kopiere dann den Inhalt in den untenstehenden Editor."
},
workbench: {
step1: "Öffne <bold>MySQL Workbench</bold> und stelle eine Verbindung zu deinem Server her.",
step2: "Gehe im oberen Menü zu <bold>Server > Data Export</bold>.",
step3: "Wähle unter <bold>Export Options</bold> <bold>Dump Structure Only</bold>.",
step4: "Aktiviere <bold>Export to Self-Contained File</bold>, wähle einen Speicherort und Dateinamen.",
step5: "Klicke auf <bold>Start Export</bold> und kopiere den Inhalt in den Code-Editor unten."
},
heidisql: {
step1: "Öffne <bold>HeidiSQL</bold> und verbinde dich mit deinem Server.",
step2: "Klicke in der <bold>linken Seitenleiste</bold> mit der rechten Maustaste auf die Datenbank.",
step3: "Wähle <bold>Export database as SQL</bold>.",
step4: "Wähle <bold>No data</bold> und stelle sicher, dass <bold>Create</bold> aktiviert ist.",
step5: "Klicke auf <bold>Export</bold> und kopiere den Inhalt der <code>.sql</code>-Datei in den Editor."
},
dbbrowser: {
step1: "Starte <bold>DB Browser for SQLite</bold>.",
step2: "Gehe zu <bold>File > Open Database</bold> und wähle deine <code>.sqlite</code>- oder <code>.db</code>-Datei.",
step3: "Gehe zu <bold>File > Export > Database to SQL file</bold>.",
step4: "Wähle im Dialog <bold>Export schema only</bold> und klicke auf <bold>Save</bold>.",
step5: "Kopiere abschließend den Inhalt der <code>.sql</code>-Datei in den Editor."
}
}
}
}
export const deLanguage: Language = {
name: "German",
nativeName: "Deutsch",
code: "de",
};
+1
View File
@@ -14,6 +14,7 @@ export const en = {
},
navbar: {
rename_db: "Rename database",
search : "Search"
},
db_controller: {
filter: "Filter",
+277
View File
@@ -0,0 +1,277 @@
import { Language } from "../types";
export const es = {
translation: {
sidebar: {
tables: "Tablas",
relationships: "Relaciones"
},
color_picker: {
default_color: "Color predeterminado"
},
navbar: {
rename_db: "Renombrar base de datos",
search : "Buscar"
},
db_controller: {
filter: "Filtrar",
add_table: "Agregar tabla",
add_field: "Agregar campo",
add_index: "Agregar índice",
delete_table: "Eliminar tabla",
duplicate: "Duplicar",
add_relationship: "Agregar relación",
show_code: "Mostrar código",
fields: "Campos",
indexes: "Índices",
note: "Nota",
name: "Nombre",
type: "Tipo",
nullable: "Permite nulo",
select_fields: "Seleccionar campos",
unique: "Único",
table_note: "Nota de la tabla",
collapse: "Colapsar todo",
primary_key: "Clave primaria",
foreign_key: "Clave foránea",
source_table: "Tabla de origen",
referenced_table: "Tabla referenciada",
select_table: "Seleccionar tabla",
select_field: "Seleccionar campo",
empty_list : {
no_tables : "Sin tablas" ,
no_tables_description : "Crea una tabla para comenzar." ,
no_relationships : "Sin relaciones" ,
no_relationships_description : "Crea relaciones para conectar dos tablas"
} ,
cardinality: {
name: "Cardinalidad",
one_to_one: "Uno a uno",
one_to_many: "Uno a muchos",
many_to_one: "Muchos a uno",
many_to_many: "Muchos a muchos",
},
foreign_key_actions : {
title : "Acciones de clave foránea" ,
on_delete : "Al eliminar" ,
on_update : "Al actualizar" ,
actions : {
no_action : "Sin acción" ,
cascade : "Cascada" ,
set_null : "Establecer nulo" ,
set_default : "Establecer valor predeterminado" ,
restrict : "Restringir"
}
} ,
field_settings: {
title: "Configuración de campo",
unique: "Único",
unsigned: "Sin signo",
numeric_setting: "Configuración numérica",
decimal_setting: "Configuración decimal",
zeroFill: "Relleno con ceros",
autoIncrement: "Autoincremento",
note: "Nota",
delete_field: "Eliminar campo",
field_note: "Nota del campo",
precision: "Precisión",
text_setting: "Configuración de texto",
charset: "Charset",
collation: "Intercalación",
scale: "Escala",
max_length: "Longitud máxima",
integer_width: "Ancho de entero",
width: "Ancho",
default_value: "Valor predeterminado",
value: "Valor",
length: "Longitud",
values: "Valores",
type_enter: "Escribe y presiona enter",
precision_def: "Total de dígitos permitidos (antes + después del decimal).",
scale_def: "Dígitos permitidos después del decimal.",
time_default_value: {
no_value: "Sin valor",
custom: "Hora personalizada",
now: "Ahora"
},
errors: {
max_length: "debe ser un número positivo, sin decimales.",
integer_default_value: "Valor predeterminado inválido para entero",
precision: "La precisión debe ser un número positivo, sin decimales.",
scale: "La escala debe ser un número positivo, sin decimales.",
scale_max_value: "La escala debe ser ≤ precisión."
},
pick_value: "Seleccionar valor"
},
delete: "Eliminar",
index_setting: "Configuración del índice",
table_actions: "Acciones de la tabla",
actions: "Acciones",
delete_index: "Eliminar índice",
index_name: "Nombre del índice",
create_relationship: "Crear relación",
relationship_error: "Para crear una relación, la clave primaria y la clave foránea deben ser del mismo tipo.",
invalid_relationship: {
title: "Relación inválida",
description: "El tipo de clave de origen no coincide con el tipo de clave referenciada. Asegúrese de que ambas claves tengan el mismo tipo de datos."
},
circular_dependency: {
title: "Dependencia circular detectada",
toast_description: "Se encontró una referencia circular entre tablas. Revisa el diagrama a la izquierda y elimina una de las relaciones para corregirlo.",
description: "Tu esquema contiene una relación foránea circular entre tablas. Para corregirlo",
suggestion: "elimina una de las relaciones que se indican a continuación y que están causando el ciclo.",
remove_relationship: "Eliminar relación"
}
},
table: {
double_click: "Doble clic para editar",
overlapping_tables: "Tablas superpuestas",
show_more: "Mostrar más",
show_less: "Mostrar menos"
},
control_buttons: {
redo: "Rehacer",
undo: "Deshacer",
zoom_in: "Acercar",
zoom_out: "Alejar",
adjust_positions: "Ajustar posiciones",
show_all: "Mostrar todo"
},
menu: {
file: "Archivo",
new: "Nuevo",
open: "Abrir",
save: "Guardar",
import: "Importar",
json: ".json",
dbml: ".dbml",
mysql: "MySql",
postgresql: "Postgresql",
export_sql: "Exportar SQL",
generic: "Genérico",
export_orm_models: "Exportar modelos ORM",
delete_project: "Eliminar proyecto",
edit: "Editar",
undo: "Deshacer",
redo: "Rehacer",
clear: "Limpiar",
view: "Vista",
hide_controller: "Ocultar controlador",
show_controller : "Mostrar controlador" ,
cardinality_style: "Estilo de cardinalidad",
hidden: "Oculto",
numeric: "Numérico",
symbolic : "Simbólico" ,
theme: "Tema",
light: "Claro",
dark: "Oscuro",
help: "Ayuda",
show_docs: "Mostrar documentación",
join_discord: "Unirse a Discord",
},
modals: {
close: "Cerrar",
create: "Crear",
pick_database: "Selecciona tu base de datos.",
create_database_header: "Cada base de datos ofrece características y funcionalidades distintas.",
db_name: "Nombre de la base de datos",
db_name_error: "Por favor, proporciona un nombre para la base de datos",
continue: "Continuar",
open: "Abrir",
open_database: "Abrir base de datos",
open_database_header: "Abre una base de datos seleccionando una de la lista.",
delete_database: "Eliminar base de datos",
delete_database_content: "Esta acción es irreversible y eliminará permanentemente el diagrama.",
delete: "Eliminar",
import_database: {
title: "Importar tu base de datos",
import: "Importar",
import_options: "¿Te gustaría importar usando :" ,
import_error : "Error al analizar SQL" ,
import_error_description : "No pudimos importar tu SQL porque contiene sintaxis inválida." ,
import_warning : "Advertencia al analizar SQL" ,
import_warning_description : "Algunos elementos no pudieron ser procesados debido a declaraciones no compatibles o incompletas." ,
} ,
export_sql : "Exportar SQL" ,
export_sql_header : "Exporta tu diagrama de base de datos en código SQL"
},
clipboard: {
copy: "Copiar",
copied: "Copiado"
},
connection_status : {
online: "En línea" ,
offline : "Sin conexión" ,
saving : "Guardando" ,
saved : "Guardado" ,
last_synced : "Última sincronización" ,
min_ago : "min atrás" ,
hour_ago : "hace una hora" ,
just_now : "Justo ahora"
},
import: {
instructions: "Instrucciones",
install: "Instalar",
run_command: "Ejecuta el siguiente comando en tu terminal.",
example: "Ejemplo",
copy_code: "Copia el contenido del archivo .sql en la sección de código a continuación.",
pg_admin: {
"step1": "Abre <bold>Pg Admin</bold>.",
"step2": "Haz clic derecho en tu base de datos y selecciona <bold>Backup</bold> del menú contextual.",
"step3": "Nombra tu archivo <code>.sql</code>, establece el formato en <bold>Plain</bold> y elige <bold>Encoding: UTF8.</bold>",
"step4": "Asegúrate de que <bold>Only schema</bold> esté marcado y <bold>Only data</bold> desmarcado en la pestaña <bold>Data Options</bold>.",
"step5": "Haz clic en <bold>Backup</bold> para exportar el archivo, luego copia su contenido en el editor de código a continuación."
},
workbench: {
"step1": "Abre <bold>MySQL Workbench</bold> y <bold>conéctate</bold> a tu servidor MySQL.",
"step2": "En el menú superior, ve a <bold>Server > Data Export</bold>.",
"step3": "En las <bold>Opciones de exportación</bold>, elige <bold>Dump Structure Only</bold>.",
"step4": "Marca <bold>Export to Self-Contained File</bold>, luego elige una ubicación y un nombre para el archivo <code>.sql</code>.",
"step5": "Haz clic en <bold>Start Export</bold> para iniciar el proceso. Luego copia su contenido en el editor de código."
},
heidisql: {
"step1": "<bold>Abre HeidiSQL</bold> y conéctate a tu servidor.",
"step2": "En la <bold>barra lateral izquierda, haz clic derecho</bold> sobre la base de datos que quieres exportar.",
"step3": "Selecciona <bold>Exportar base de datos como SQL</bold> del menú contextual.",
"step4": "Selecciona <bold>Sin datos</bold> y asegúrate de que <bold>Crear</bold> esté marcado para exportar solo la estructura.",
"step5": "Haz clic en el botón <bold>Exportar</bold> y finalmente copia el contenido del archivo <code>.sql</code> en el <bold>editor de código</bold> a continuación."
},
dbbrowser: {
step1: "Inicia <bold>DB Browser for SQLite</bold>.",
step2: "Haz clic en <bold>Archivo > Abrir base de datos</bold> y selecciona tu archivo <code>.sqlite</code> o <code>.db</code>.",
step3: "Ve a <bold>Archivo > Exportar > Base de datos a archivo SQL</bold> desde el menú superior.",
step4: "En el diálogo, elige <bold>Exportar solo esquema</bold> y haz clic en <bold>Guardar</bold>.",
step5: "Finalmente, copia el contenido del archivo <code>.sql</code> en el <bold>editor de código</bold> a continuación."
},
}
}
}
export const esLanguage: Language = {
name: "Spanish",
nativeName: "Español",
code: "es",
};
+171 -54
View File
@@ -7,74 +7,136 @@ export const fr = {
tables: "Tables",
relationships: "Relations"
},
modal: {
close: "Fermer",
create: "Créer"
},
color_picker: {
default_color: "Couleur par défaut"
},
navbar: {
rename_db: "Renommer la base de données",
search: "Rechercher"
},
db_controller: {
filter: "Filtrer",
add_table: "Ajouter une Table",
add_field: "Ajouter un Champ",
add_index: "Ajouter un Index",
add_relationship: "Ajouter une Relation",
add_table: "Ajouter une table",
add_field: "Ajouter un champ",
add_index: "Ajouter un index",
delete_table: "Supprimer la table",
duplicate: "Dupliquer",
add_relationship: "Ajouter une relation",
show_code: "Afficher le code",
fields: "Champs",
indexes: "Indexes",
indexes: "Index",
note: "Note",
name: "Nom",
type: "Type",
nullable: "Nullable",
select_fields: "Sélectionner les champs",
unique: "Unique",
table_note: "Note de la Table",
table_note: "Note de la table",
collapse: "Tout réduire",
primary_key: "Clé primaire",
foreign_key: "Clé étrangère",
source_table: "Table source",
target_table: "Table cible",
select_table: "Sélectionner la table",
select_field: "Sélectionner le champ",
referenced_table: "Table référencée",
select_table: "Sélectionner une table",
select_field: "Sélectionner un champ",
empty_list: {
no_tables: "Aucune table",
no_tables_description: "Créez une table pour commencer.",
no_relationships: "Aucune relation",
no_relationships_description: "Créez des relations pour connecter deux tables"
},
cardinality: {
name: "Cardinalité",
one_to_one: "Un à Un",
one_to_many: "Un à Plusieurs",
many_to_one: "Plusieurs à Un",
many_to_many: "Plusieurs à Plusieurs"
one_to_one: "Un à un",
one_to_many: "Un à plusieurs",
many_to_one: "Plusieurs à un",
many_to_many: "Plusieurs à plusieurs"
},
foreign_key_actions: {
title: "Actions de clé étrangère",
on_delete: "Lors de la suppression",
on_update: "Lors de la mise à jour",
actions: {
no_action: "Aucune action",
cascade: "Cascade",
set_null: "Définir à null",
set_default: "Définir par défaut",
restrict: "Restreindre"
}
},
field_settings: {
title: "Paramètres du champ",
unique: "Unique",
unsigned: "Non signé",
numeric_setting: "Paramètres numériques",
decimal_setting: "Paramètres décimaux",
zeroFill: "Complément zéro",
autoIncrement: "Auto-incrémentation",
note: "Note",
delete_field: "Supprimer le champ",
field_note: "Note du champ",
precision: "Précision",
text_setting: "Paramètres de texte",
charset: "Jeu de caractères",
collation: "Collation",
scale: "Échelle",
max_length: "Longueur max",
integer_width: "Largeur entière",
width: "Largeur",
default_value: "Valeur par défaut",
value: "Valeur",
length: "Longueur",
values: "Valeurs",
type_enter: "Tapez et appuyez sur Entrée",
precision_def: "Nombre total de chiffres autorisés (avant + après la virgule).",
scale_def: "Nombre de chiffres autorisés après la virgule.",
time_default_value: {
no_value: "Aucune valeur",
custom: "Heure personnalisée",
now: "Maintenant"
},
errors: {
max_length: "doit être un nombre positif sans décimales.",
integer_default_value: "Valeur par défaut invalide pour un entier",
precision: "La précision doit être un nombre positif sans décimales.",
scale: "L'échelle doit être un nombre positif sans décimales.",
scale_max_value: "L'échelle doit être ≤ à la précision."
},
pick_value: "Choisir une valeur"
},
delete: "Supprimer",
field_setting: "Paramètres du champ",
table_actions: "Actions sur le champ",
index_setting: "Paramètres de l'index",
table_actions: "Actions de table",
actions: "Actions",
field_note: "Note sur le champ",
delete_field: "Supprimer le champ",
create_relationship: "Créer une Relation",
relationship_error: "Pour créer une relation, la primary key et la foreign key doivent être du même type.",
delete_index: "Supprimer l'index",
index_name: "Nom de l'index",
create_relationship: "Créer une relation",
relationship_error: "Pour créer une relation, la clé primaire et la clé étrangère doivent être du même type.",
invalid_relationship: {
title: "Relation invalide",
description: "Le type de la source key ne correspond pas au type de la referenced key. Veuillez vous assurer que les deux clés ont le même type de données."
description: "Le type de la clé source ne correspond pas à celui de la clé référencée. Assurez-vous qu'elles aient le même type de données."
},
circular_dependency: {
title: "Dépendance circulaire détectée",
toast_description: "Une référence circulaire entre les tables a été détectée. Vérifiez le diagramme à gauche et supprimez une des relations pour corriger cela.",
description: "Votre schéma contient une relation de clé étrangère circulaire entre les tables. Pour corriger cela,",
suggestion: "supprimez lune des relations ci-dessous qui provoque le cycle.",
remove_relationship: "Supprimer la relation"
}
},
table: {
double_click: "Double-cliquez pour éditer",
double_click: "Double-cliquez pour modifier",
overlapping_tables: "Tables qui se chevauchent",
show_more: "Afficher plus",
show_less: "Afficher moins"
},
control_buttons: {
redo: "Refaire",
redo: "Rétablir",
undo: "Annuler",
zoom_in: "Zoom avant",
zoom_out: "Zoom arrière",
adjust_positions: "Ajuster les positions",
show_all: "Tout afficher"
show_all: "Afficher tout"
},
menu: {
file: "Fichier",
@@ -84,21 +146,23 @@ export const fr = {
import: "Importer",
json: ".json",
dbml: ".dbml",
mysql: "MySql",
postgresql: "Postgresql",
export_sql: "Exporter SQL",
mysql: "MySQL",
postgresql: "PostgreSQL",
export_sql: "Exporter en SQL",
generic: "Générique",
export_orm_models: "Exporter les ORM Models",
export_orm_models: "Exporter les modèles ORM",
delete_project: "Supprimer le projet",
edit: "Éditer",
undo: "Annuler",
redo: "Refaire",
redo: "Rétablir",
clear: "Effacer",
view: "Affichage",
view: "Vue",
hide_controller: "Masquer le contrôleur",
zoom_on_scroll: "Zoom au défilement",
on: "Activé",
off: "Désactivé",
show_controller: "Afficher le contrôleur",
cardinality_style: "Style de cardinalité",
hidden: "Caché",
numeric: "Numérique",
symbolic: "Symbolique",
theme: "Thème",
light: "Clair",
dark: "Sombre",
@@ -106,30 +170,83 @@ export const fr = {
show_docs: "Afficher la documentation",
join_discord: "Rejoindre Discord"
},
modals: {
close: "Fermer",
create: "Créer",
pick_database: "Choisissez votre base de données.",
create_database_header: "Chaque base de données offre des fonctionnalités différentes.",
db_name: "Nom de la base de données",
db_name_error: "Veuillez saisir un nom de base de données",
continue: "Continuer",
open: "Ouvrir",
open_database: "Ouvrir une base de données",
open_database_header: "Ouvrez une base de données en sélectionnant une dans la liste.",
delete_database: "Supprimer la base de données",
delete_database_content: "Cette action est irréversible et supprimera définitivement le diagramme.",
delete: "Supprimer",
import_database: {
title: "Importer votre base de données",
import: "Importer",
import_options: "Souhaitez-vous importer en utilisant :",
import_error: "Erreur danalyse SQL",
import_error_description: "Nous n'avons pas pu importer votre SQL car il contient une syntaxe invalide.",
import_warning: "Avertissement danalyse SQL",
import_warning_description: "Certains éléments n'ont pas pu être traités à cause de déclarations non prises en charge ou incomplètes."
},
export_sql: "Exporter en SQL",
export_sql_header: "Exporter votre diagramme de base de données en code SQL"
},
clipboard: {
copy: "Copier",
copied: "Copié"
},
connection_status: {
online: "En ligne",
offline: "Hors ligne",
saving: "Enregistrement...",
saved: "Enregistré",
last_synced: "Dernière synchronisation",
min_ago: "min auparavant",
hour_ago: "heure auparavant",
just_now: "À linstant"
},
import: {
instructions: "Instructions",
install: "Installer",
run_command: "Exécutez la commande suivante dans votre terminal.",
example: "Exemple",
copy_code: "Copiez le contenu du fichier .sql dans la section de code ci-dessous.",
copy_code: "Copiez le contenu du fichier .sql dans la section code ci-dessous.",
pg_admin: {
step1: "Ouvrez <bold>Pg Admin</bold>.",
step2: "Faites un clic droit sur votre base de données et sélectionnez <bold>Sauvegarder</bold> dans le menu contextuel.",
step3: "Nommez votre fichier <code>.sql</code>, définissez le format sur <bold>Plain</bold> et choisissez <bold>Encodage : UTF8.</bold>",
step4: "Assurez-vous que <bold>Only schema</bold> est coché et que <bold>Only data</bold> ne l'est pas dans l'onglet <bold>Data Options</bold>.",
step5: "Cliquez sur <bold>Sauvegarder</bold> pour exporter le fichier, puis copiez son contenu dans la section de l'éditeur de code ci-dessous."
step2: "Faites un clic droit sur votre base de données et sélectionnez <bold>Sauvegarder</bold>.",
step3: "Nommez votre fichier <code>.sql</code>, définissez le format sur <bold>Simple</bold>, et choisissez <bold>Encodage : UTF8.</bold>",
step4: "Assurez-vous que <bold>Schéma uniquement</bold> est coché et que <bold>Données uniquement</bold> ne l'est pas dans l<bold>onglet Options de données</bold>.",
step5: "Cliquez sur <bold>Sauvegarder</bold> pour exporter le fichier, puis copiez son contenu dans léditeur de code ci-dessous."
},
workbench: {
step1: "Ouvrez <bold>MySQL Workbench</bold> et <bold>connectez-vous</bold> à votre serveur MySQL.",
step2: "Dans le menu du haut, allez dans <bold>Server &gt; Data Export</bold>.",
step3: "Dans les <bold>Options d'exportation</bold>, choisissez <bold>Dump Structure Only</bold>.",
step4: "Cochez <bold>Export to Self-Contained File</bold>, puis choisissez un emplacement et donnez un nom au fichier <code>.sql</code> de sortie.",
step5: "Cliquez sur <bold>Démarrer l'exportation</bold> pour lancer le processus. Ensuite, copiez son contenu dans la section de l'éditeur de code ci-dessous."
step2: "Dans le menu principal, allez à <bold>Serveur > Exportation de données</bold>.",
step3: "Dans les <bold>Options dexportation</bold>, choisissez <bold>Exporter la structure uniquement</bold>.",
step4: "Cochez <bold>Exporter dans un fichier autonome</bold>, puis choisissez un emplacement et entrez un nom pour le fichier <code>.sql</code>.",
step5: "Cliquez sur <bold>Commencer lexportation</bold>. Ensuite, copiez son contenu dans léditeur de code ci-dessous."
},
heidisql: {
step1: "<bold>Ouvrez HeidiSQL</bold> et connectez-vous à votre serveur.",
step2: "Dans la <bold>barre latérale gauche</bold>, faites un clic droit sur la base de données à exporter.",
step3: "Choisissez <bold>Exporter la base de données en SQL</bold>.",
step4: "Sélectionnez <bold>Pas de données</bold> et assurez-vous que <bold>Créer</bold> est coché pour exporter uniquement la structure.",
step5: "Cliquez sur le bouton <bold>Exporter</bold>, puis copiez le contenu du fichier <code>.sql</code> dans l’éditeur de code ci-dessous."
},
dbbrowser: {
step1: "Lancez <bold>DB Browser for SQLite</bold>.",
step2: "Cliquez sur <bold>Fichier > Ouvrir une base de données</bold> et sélectionnez votre fichier <code>.sqlite</code> ou <code>.db</code>.",
step3: "Allez à <bold>Fichier > Exporter > Base de données vers fichier SQL</bold>.",
step4: "Dans la fenêtre, sélectionnez <bold>Exporter uniquement le schéma</bold> et cliquez sur <bold>Enregistrer</bold>.",
step5: "Enfin, copiez le contenu du fichier <code>.sql</code> dans l’éditeur de code ci-dessous."
}
}
}
};
}
export const frLanguage: Language = {
name: "French",
+266
View File
@@ -0,0 +1,266 @@
import { Language } from "../types";
export const hi = {
translation: {
sidebar: {
tables: "तालिकाएँ",
relationships: "रिलेशनशिप्स"
},
color_picker: {
default_color: "डिफ़ॉल्ट रंग"
},
navbar: {
rename_db: "डेटाबेस का नाम बदलें",
search: "खोजें"
},
db_controller: {
filter: "फ़िल्टर",
add_table: "तालिका जोड़ें",
add_field: "फ़ील्ड जोड़ें",
add_index: "इंडेक्स जोड़ें",
delete_table: "तालिका हटाएँ",
duplicate: "कॉपी करें",
add_relationship: "रिलेशनशिप जोड़ें",
show_code: "कोड दिखाएं",
fields: "फ़ील्ड्स",
indexes: "इंडेक्सेस",
note: "नोट",
name: "नाम",
type: "प्रकार",
nullable: "नल योग्य",
select_fields: "फ़ील्ड चुनें",
unique: "अद्वितीय",
table_note: "तालिका नोट",
collapse: "सभी को संक्षिप्त करें",
primary_key: "प्राथमिक कुंजी",
foreign_key: "विदेशी कुंजी",
source_table: "स्रोत तालिका",
referenced_table: "संदर्भित तालिका",
select_table: "तालिका चुनें",
select_field: "फ़ील्ड चुनें",
empty_list: {
no_tables: "कोई तालिकाएँ नहीं",
no_tables_description: "शुरू करने के लिए एक तालिका बनाएं।",
no_relationships: "कोई रिलेशनशिप्स नहीं",
no_relationships_description: "दो तालिकाओं को जोड़ने के लिए रिलेशनशिप बनाएं"
},
cardinality: {
name: "कार्डिनैलिटी",
one_to_one: "एक से एक",
one_to_many: "एक से अनेक",
many_to_one: "अनेक से एक",
many_to_many: "अनेक से अनेक"
},
foreign_key_actions: {
title: "विदेशी कुंजी क्रियाएँ",
on_delete: "हटाने पर",
on_update: "अपडेट पर",
actions: {
no_action: "कोई क्रिया नहीं",
cascade: "कैस्केड",
set_null: "नल सेट करें",
set_default: "डिफ़ॉल्ट सेट करें",
restrict: "प्रतिबंधित करें"
}
},
field_settings: {
title: "फ़ील्ड सेटिंग",
unique: "अद्वितीय",
unsigned: "असाइन किए बिना",
numeric_setting: "संख्यात्मक सेटिंग",
decimal_setting: "दशमलव सेटिंग",
zeroFill: "शून्य भरें",
autoIncrement: "स्वतः वृद्धि",
note: "नोट",
delete_field: "फ़ील्ड हटाएं",
field_note: "फ़ील्ड नोट",
precision: "सटीकता",
text_setting: "टेक्स्ट सेटिंग",
charset: "अक्षरसेट",
collation: "कोलेशन",
scale: "स्केल",
max_length: "अधिकतम लंबाई",
integer_width: "पूर्णांक चौड़ाई",
width: "चौड़ाई",
default_value: "डिफ़ॉल्ट मान",
value: "मान",
length: "लंबाई",
values: "मान",
type_enter: "टाइप करें और एंटर दबाएं",
precision_def: "कुल अनुमत अंक (दशमलव से पहले और बाद)।",
scale_def: "दशमलव के बाद अनुमत अंक।",
time_default_value: {
no_value: "कोई मान नहीं",
custom: "कस्टम समय",
now: "अभी"
},
errors: {
max_length: "सकारात्मक संख्या होनी चाहिए, दशमलव नहीं।",
integer_default_value: "पूर्णांक के लिए अमान्य डिफ़ॉल्ट मान",
precision: "सटीकता सकारात्मक संख्या होनी चाहिए, दशमलव नहीं।",
scale: "स्केल सकारात्मक संख्या होनी चाहिए, दशमलव नहीं।",
scale_max_value: "स्केल ≤ सटीकता होनी चाहिए।"
},
pick_value: "मान चुनें"
},
delete: "हटाएँ",
index_setting: "इंडेक्स सेटिंग",
table_actions: "तालिका क्रियाएँ",
actions: "क्रियाएँ",
delete_index: "इंडेक्स हटाएं",
index_name: "इंडेक्स नाम",
create_relationship: "रिलेशनशिप बनाएं",
relationship_error: "रिलेशनशिप बनाने के लिए, प्राथमिक कुंजी और विदेशी कुंजी समान प्रकार की होनी चाहिए।",
invalid_relationship: {
title: "अमान्य रिलेशनशिप",
description: "स्रोत कुंजी प्रकार संदर्भित कुंजी प्रकार से मेल नहीं खाता। कृपया सुनिश्चित करें कि दोनों कुंजी एक ही डेटा प्रकार की हों।"
},
circular_dependency: {
title: "परिपत्र निर्भरता मिली",
toast_description: "तालिकाओं के बीच परिपत्र संदर्भ पाया गया। बाईं ओर के आरेख की जाँच करें और एक रिलेशनशिप हटाएं।",
description: "आपकी स्कीमा में तालिकाओं के बीच एक परिपत्र विदेशी कुंजी संबंध है। इसे ठीक करने के लिए",
suggestion: "नीचे दी गई चक्र उत्पन्न करने वाली रिलेशनशिप में से एक को हटाएं।",
remove_relationship: "रिलेशनशिप हटाएं"
}
},
table: {
double_click: "संपादन के लिए डबल क्लिक करें",
overlapping_tables: "ओवरलैपिंग तालिकाएँ",
show_more: "और दिखाएं",
show_less: "कम दिखाएं"
},
control_buttons: {
redo: "फिर से करें",
undo: "पूर्ववत करें",
zoom_in: "ज़ूम इन",
zoom_out: "ज़ूम आउट",
adjust_positions: "स्थिति समायोजित करें",
show_all: "सभी दिखाएं"
},
menu: {
file: "फ़ाइल",
new: "नया",
open: "खोलें",
save: "सहेजें",
import: "आयात करें",
json: ".json",
dbml: ".dbml",
mysql: "MySQL",
postgresql: "PostgreSQL",
export_sql: "SQL निर्यात करें",
generic: "सामान्य",
export_orm_models: "ORM मॉडल निर्यात करें",
delete_project: "परियोजना हटाएं",
edit: "संपादित करें",
undo: "पूर्ववत करें",
redo: "फिर से करें",
clear: "साफ करें",
view: "दृश्य",
hide_controller: "कंट्रोलर छिपाएं",
show_controller: "कंट्रोलर दिखाएं",
cardinality_style: "कार्डिनैलिटी शैली",
hidden: "छिपा हुआ",
numeric: "संख्यात्मक",
symbolic: "प्रतीकात्मक",
theme: "थीम",
light: "हल्का",
dark: "गहरा",
help: "मदद",
show_docs: "दस्तावेज़ दिखाएं",
join_discord: "डिस्कॉर्ड से जुड़ें"
},
modals: {
close: "बंद करें",
create: "बनाएं",
pick_database: "अपना डेटाबेस चुनें।",
create_database_header: "हर डेटाबेस विशिष्ट विशेषताएं और कार्यक्षमता प्रदान करता है।",
db_name: "डेटाबेस का नाम",
db_name_error: "कृपया डेटाबेस का नाम प्रदान करें",
continue: "जारी रखें",
open: "खोलें",
open_database: "डेटाबेस खोलें",
open_database_header: "सूची में से एक डेटाबेस चुनकर खोलें।",
delete_database: "डेटाबेस हटाएं",
delete_database_content: "यह क्रिया अपरिवर्तनीय है और आरेख को स्थायी रूप से हटा देगी।",
delete: "हटाएँ",
import_database: {
title: "अपना डेटाबेस आयात करें",
import: "आयात करें",
import_options: "क्या आप निम्न के माध्यम से आयात करना चाहेंगे:",
import_error: "SQL पार्सिंग त्रुटि",
import_error_description: "हम आपका SQL आयात नहीं कर सके क्योंकि इसमें अमान्य सिंटैक्स है।",
import_warning: "SQL पार्सिंग चेतावनी",
import_warning_description: "कुछ तत्वों को समर्थन न होने या अधूरे घोषणाओं के कारण संसाधित नहीं किया जा सका।"
},
export_sql: "SQL निर्यात करें",
export_sql_header: "अपने डेटाबेस आरेख को SQL कोड में निर्यात करें"
},
clipboard: {
copy: "कॉपी करें",
copied: "कॉपी किया गया"
},
connection_status: {
online: "ऑनलाइन",
offline: "ऑफ़लाइन",
saving: "सहेजा जा रहा है",
saved: "सहेजा गया",
last_synced: "अंतिम समन्वय",
min_ago: "मिनट पहले",
hour_ago: "घंटा पहले",
just_now: "अभी"
},
import: {
instructions: "निर्देश",
install: "इंस्टॉल करें",
run_command: "अपने टर्मिनल में निम्न कमांड चलाएं।",
example: "उदाहरण",
copy_code: "नीचे दिए गए कोड सेक्शन में .sql फ़ाइल की सामग्री कॉपी करें।",
pg_admin: {
step1: "<bold>Pg Admin</bold> खोलें।",
step2: "अपने डेटाबेस पर राइट-क्लिक करें और <bold>Backup</bold> चुनें।",
step3: "अपनी <code>.sql</code> फ़ाइल को नाम दें, फॉर्मेट को <bold>Plain</bold> पर सेट करें और <bold>Encoding: UTF8</bold> चुनें।",
step4: "<bold>Data Options टैब</bold> में सुनिश्चित करें कि <bold>Only schema</bold> चयनित है और <bold>Only data</bold> चयनित नहीं है।",
step5: "<bold>Backup</bold> पर क्लिक करें और फिर उसकी सामग्री को नीचे दिए गए कोड एडिटर में पेस्ट करें।"
},
workbench: {
step1: "<bold>MySQL Workbench</bold> खोलें और अपने MySQL सर्वर से <bold>connect</bold> करें।",
step2: "शीर्ष मेनू में <bold>Server > Data Export</bold> पर जाएं।",
step3: "<bold>Export Options</bold> में <bold>Dump Structure Only</bold> चुनें।",
step4: "<bold>Export to Self-Contained File</bold> को चेक करें, स्थान और नाम चुनें।",
step5: "<bold>Start Export</bold> पर क्लिक करें और फिर फ़ाइल की सामग्री को नीचे दिए गए कोड एडिटर में कॉपी करें।"
},
heidisql: {
step1: "<bold>HeidiSQL</bold> खोलें और अपने सर्वर से कनेक्ट करें।",
step2: "बाएं साइडबार में, उस डेटाबेस पर <bold>राइट-क्लिक</bold> करें जिसे आप निर्यात करना चाहते हैं।",
step3: "<bold>Export database as SQL</bold> चुनें।",
step4: "<bold>No data</bold> चुनें और सुनिश्चित करें कि <bold>Create</bold> चेक किया गया है।",
step5: "<bold>Export</bold> बटन पर क्लिक करें और फिर <code>.sql</code> फ़ाइल की सामग्री को नीचे कोड एडिटर में कॉपी करें।"
},
dbbrowser: {
step1: "<bold>DB Browser for SQLite</bold> लॉन्च करें।",
step2: "<bold>File > Open Database</bold> पर क्लिक करें और अपनी <code>.sqlite</code> या <code>.db</code> फ़ाइल चुनें।",
step3: "शीर्ष मेनू से <bold>File > Export > Database to SQL file</bold> पर जाएं।",
step4: "डायलॉग में <bold>Export schema only</bold> चुनें और <bold>Save</bold> पर क्लिक करें।",
step5: "अंत में, <code>.sql</code> फ़ाइल की सामग्री को नीचे दिए गए <bold>code editor</bold> में कॉपी करें।"
}
}
}
};
export const hiLanguage: Language = {
name: "Hindi",
nativeName: "हिन्दी",
code: "hi",
};
+265
View File
@@ -0,0 +1,265 @@
import { Language } from "../types";
export const pt = {
translation: {
sidebar: {
tables: "Tabelas",
relationships: "Relacionamentos"
},
color_picker: {
default_color: "Cor padrão"
},
navbar: {
rename_db: "Renomear banco de dados",
search: "Pesquisar"
},
db_controller: {
filter: "Filtrar",
add_table: "Adicionar Tabela",
add_field: "Adicionar Campo",
add_index: "Adicionar Índice",
delete_table: "Excluir Tabela",
duplicate: "Duplicar",
add_relationship: "Adicionar Relacionamento",
show_code: "Mostrar código",
fields: "Campos",
indexes: "Índices",
note: "Nota",
name: "Nome",
type: "Tipo",
nullable: "Aceita Nulo",
select_fields: "Selecionar campos",
unique: "Único",
table_note: "Nota da tabela",
collapse: "Recolher Tudo",
primary_key: "Chave Primária",
foreign_key: "Chave Estrangeira",
source_table: "Tabela de Origem",
referenced_table: "Tabela Referenciada",
select_table: "Selecionar tabela",
select_field: "Selecionar campo",
empty_list: {
no_tables: "Nenhuma Tabela",
no_tables_description: "Crie uma tabela para começar.",
no_relationships: "Nenhum Relacionamento",
no_relationships_description: "Crie relacionamentos para conectar duas tabelas"
},
cardinality: {
name: "Cardinalidade",
one_to_one: "Um para Um",
one_to_many: "Um para Muitos",
many_to_one: "Muitos para Um",
many_to_many: "Muitos para Muitos"
},
foreign_key_actions: {
title: "Ações da Chave Estrangeira",
on_delete: "Ao Excluir",
on_update: "Ao Atualizar",
actions: {
no_action: "Nenhuma Ação",
cascade: "Cascata",
set_null: "Definir como Nulo",
set_default: "Definir como Padrão",
restrict: "Restringir"
}
},
field_settings: {
title: "Configuração de Campo",
unique: "Único",
unsigned: "Sem Sinal",
numeric_setting: "Configuração Numérica",
decimal_setting: "Configuração Decimal",
zeroFill: "Preencher com Zeros",
autoIncrement: "Auto Incremento",
note: "Nota",
delete_field: "Excluir Campo",
field_note: "Nota do Campo",
precision: "Precisão",
text_setting: "Configuração de Texto",
charset: "Charset",
collation: "Colação",
scale: "Escala",
max_length: "Comprimento Máximo",
integer_width: "Largura do Inteiro",
width: "Largura",
default_value: "Valor Padrão",
value: "Valor",
length: "Comprimento",
values: "Valores",
type_enter: "Digite e pressione enter",
precision_def: "Dígitos totais permitidos (antes + depois do decimal).",
scale_def: "Dígitos permitidos após o decimal.",
time_default_value: {
no_value: "Sem valor",
custom: "Hora personalizada",
now: "Agora"
},
errors: {
max_length: "deve ser um número positivo, sem decimais.",
integer_default_value: "Valor padrão inválido para Inteiro",
precision: "Precisão deve ser um número positivo, sem decimais.",
scale: "Escala deve ser um número positivo, sem decimais.",
scale_max_value: "A escala deve ser ≤ à precisão."
},
pick_value: "Escolher valor"
},
delete: "Excluir",
index_setting: "Configuração de Índice",
table_actions: "Ações da Tabela",
actions: "Ações",
delete_index: "Excluir Índice",
index_name: "Nome do Índice",
create_relationship: "Criar Relacionamento",
relationship_error: "Para criar um relacionamento, a chave primária e a chave estrangeira devem ser do mesmo tipo.",
invalid_relationship: {
title: "Relacionamento Inválido",
description: "O tipo da chave de origem não corresponde ao tipo da chave referenciada. Verifique se ambos têm o mesmo tipo de dado."
},
circular_dependency: {
title: "Dependência Circular Detectada",
toast_description: "Foi encontrado um ciclo entre tabelas. Verifique o diagrama à esquerda e remova um dos relacionamentos para corrigir.",
description: "Seu esquema contém uma relação circular de chave estrangeira entre tabelas. Para corrigir,",
suggestion: "remova um dos relacionamentos listados abaixo que está causando o ciclo.",
remove_relationship: "Remover relacionamento"
}
},
table: {
double_click: "Clique duas vezes para editar",
overlapping_tables: "Tabelas Sobrepostas",
show_more: "Mostrar mais",
show_less: "Mostrar menos"
},
control_buttons: {
redo: "Refazer",
undo: "Desfazer",
zoom_in: "Aumentar Zoom",
zoom_out: "Diminuir Zoom",
adjust_positions: "Ajustar Posições",
show_all: "Mostrar tudo"
},
menu: {
file: "Arquivo",
new: "Novo",
open: "Abrir",
save: "Salvar",
import: "Importar",
json: ".json",
dbml: ".dbml",
mysql: "MySQL",
postgresql: "PostgreSQL",
export_sql: "Exportar SQL",
generic: "Genérico",
export_orm_models: "Exportar Modelos ORM",
delete_project: "Excluir Projeto",
edit: "Editar",
undo: "Desfazer",
redo: "Refazer",
clear: "Limpar",
view: "Visualizar",
hide_controller: "Ocultar Controlador",
show_controller: "Mostrar Controlador",
cardinality_style: "Estilo de Cardinalidade",
hidden: "Oculto",
numeric: "Numérico",
symbolic: "Simbólico",
theme: "Tema",
light: "Claro",
dark: "Escuro",
help: "Ajuda",
show_docs: "Mostrar Documentação",
join_discord: "Entrar no Discord"
},
modals: {
close: "Fechar",
create: "Criar",
pick_database: "Escolha seu Banco de Dados.",
create_database_header: "Cada banco de dados oferece recursos e funcionalidades distintas.",
db_name: "Nome do Banco de Dados",
db_name_error: "Por favor, forneça um nome para o Banco de Dados",
continue: "Continuar",
open: "Abrir",
open_database: "Abrir Banco de Dados",
open_database_header: "Abra um banco de dados selecionando um da lista.",
delete_database: "Excluir Banco de Dados",
delete_database_content: "Esta ação é irreversível e removerá o diagrama permanentemente.",
delete: "Excluir",
import_database: {
title: "Importar seu Banco de Dados",
import: "Importar",
import_options: "Gostaria de importar usando:",
import_error: "Erro de Análise SQL",
import_error_description: "Não foi possível importar seu SQL porque contém sintaxe inválida.",
import_warning: "Aviso de Análise SQL",
import_warning_description: "Alguns elementos não puderam ser processados devido a declarações não suportadas ou incompletas."
},
export_sql: "Exportar SQL",
export_sql_header: "Exporte seu diagrama de banco de dados em código SQL"
},
clipboard: {
copy: "Copiar",
copied: "Copiado"
},
connection_status: {
online: "Online",
offline: "Offline",
saving: "Salvando",
saved: "Salvo",
last_synced: "Última sincronização",
min_ago: "min atrás",
hour_ago: "hora atrás",
just_now: "Agora mesmo"
},
import: {
instructions: "Instruções",
install: "Instalar",
run_command: "Execute o seguinte comando no seu terminal.",
example: "Exemplo",
copy_code: "Copie o conteúdo do arquivo .sql na seção de código abaixo.",
pg_admin: {
step1: "Abra o <bold>Pg Admin</bold>.",
step2: "Clique com o botão direito no seu banco de dados e selecione <bold>Backup</bold>.",
step3: "Dê um nome ao seu arquivo <code>.sql</code>, defina o formato como <bold>Plain</bold> e escolha <bold>Encoding: UTF8</bold>.",
step4: "Certifique-se de que <bold>Apenas esquema</bold> esteja marcado e <bold>Apenas dados</bold> esteja desmarcado na <bold>aba Opções de Dados</bold>.",
step5: "Clique em <bold>Backup</bold> para exportar o arquivo e depois copie seu conteúdo para o editor de código abaixo."
},
workbench: {
step1: "Abra o <bold>MySQL Workbench</bold> e <bold>conecte-se</bold> ao seu servidor MySQL.",
step2: "No menu superior, vá para <bold>Servidor > Exportação de Dados</bold>.",
step3: "Nas <bold>Opções de Exportação</bold>, escolha <bold>Dump Structure Only</bold>.",
step4: "Marque <bold>Exportar para Arquivo Autônomo</bold>, escolha um local e nome para o arquivo <code>.sql</code>.",
step5: "Clique em <bold>Iniciar Exportação</bold>. Depois, copie o conteúdo para o editor de código abaixo."
},
heidisql: {
step1: "Abra o <bold>HeidiSQL</bold> e conecte-se ao seu servidor.",
step2: "Na <bold>barra lateral esquerda</bold>, clique com o botão direito no banco de dados que deseja exportar.",
step3: "Escolha <bold>Exportar banco de dados como SQL</bold>.",
step4: "Selecione <bold>Sem dados</bold> e certifique-se de que <bold>Criar</bold> esteja marcado para exportar apenas a estrutura.",
step5: "Clique em <bold>Exportar</bold> e copie o conteúdo do arquivo <code>.sql</code> para o <bold>editor de código</bold> abaixo."
},
dbbrowser: {
step1: "Inicie o <bold>DB Browser for SQLite</bold>.",
step2: "Clique em <bold>Arquivo > Abrir Banco de Dados</bold> e selecione seu arquivo <code>.sqlite</code> ou <code>.db</code>.",
step3: "Vá para <bold>Arquivo > Exportar > Banco de Dados para Arquivo SQL</bold>.",
step4: "Na janela de diálogo, escolha <bold>Exportar apenas o esquema</bold> e clique em <bold>Salvar</bold>.",
step5: "Finalmente, copie o conteúdo do arquivo <code>.sql</code> para o <bold>editor de código</bold> abaixo."
}
}
}
};
export const ptLanguage: Language = {
name: "Portuguese",
nativeName: "Português",
code: "pt",
};
+255
View File
@@ -0,0 +1,255 @@
import { Language } from "../types";
export const ru = {
translation: {
sidebar: {
tables: "Таблицы",
relationships: "Связи"
},
color_picker: {
default_color: "Цвет по умолчанию"
},
navbar: {
rename_db: "Переименовать базу данных",
search: "Поиск"
},
db_controller: {
filter: "Фильтр",
add_table: "Добавить таблицу",
add_field: "Добавить поле",
add_index: "Добавить индекс",
delete_table: "Удалить таблицу",
duplicate: "Дублировать",
add_relationship: "Добавить связь",
show_code: "Показать код",
fields: "Поля",
indexes: "Индексы",
note: "Заметка",
name: "Имя",
type: "Тип",
nullable: "Допускает NULL",
select_fields: "Выберите поля",
unique: "Уникальный",
table_note: "Заметка к таблице",
collapse: "Свернуть все",
primary_key: "Первичный ключ",
foreign_key: "Внешний ключ",
source_table: "Исходная таблица",
referenced_table: "Связанная таблица",
select_table: "Выберите таблицу",
select_field: "Выберите поле",
empty_list: {
no_tables: "Нет таблиц",
no_tables_description: "Создайте таблицу, чтобы начать.",
no_relationships: "Нет связей",
no_relationships_description: "Создайте связи для соединения двух таблиц"
},
cardinality: {
name: "Кардинальность",
one_to_one: "Один к одному",
one_to_many: "Один ко многим",
many_to_one: "Многие к одному",
many_to_many: "Многие ко многим"
},
foreign_key_actions: {
title: "Действия внешнего ключа",
on_delete: "При удалении",
on_update: "При обновлении",
actions: {
no_action: "Без действия",
cascade: "Каскад",
set_null: "Установить NULL",
set_default: "Установить по умолчанию",
restrict: "Ограничить"
}
},
field_settings: {
title: "Настройки поля",
unique: "Уникальный",
unsigned: "Без знака",
numeric_setting: "Числовые настройки",
decimal_setting: "Десятичные настройки",
zeroFill: "Дополнение нулями",
autoIncrement: "Автоинкремент",
note: "Заметка",
delete_field: "Удалить поле",
field_note: "Заметка к полю",
precision: "Точность",
text_setting: "Настройки текста",
charset: "Кодировка",
collation: "Сравнение",
scale: "Масштаб",
max_length: "Макс. длина",
integer_width: "Ширина целого числа",
width: "Ширина",
default_value: "Значение по умолчанию",
value: "Значение",
length: "Длина",
values: "Значения",
type_enter: "Введите и нажмите Enter",
precision_def: "Общее количество допустимых цифр (до и после запятой).",
scale_def: "Допустимое количество цифр после запятой.",
time_default_value: {
no_value: "Нет значения",
custom: "Произвольное время",
now: "Сейчас"
},
errors: {
max_length: "должно быть положительным числом без десятичных.",
integer_default_value: "Недопустимое значение по умолчанию для целого",
precision: "Точность должна быть положительным числом без десятичных.",
scale: "Масштаб должен быть положительным числом без десятичных.",
scale_max_value: "Масштаб должен быть ≤ точности."
},
pick_value: "Выберите значение"
},
delete: "Удалить",
index_setting: "Настройки индекса",
table_actions: "Действия с таблицей",
actions: "Действия",
delete_index: "Удалить индекс",
index_name: "Имя индекса",
create_relationship: "Создать связь",
relationship_error: "Для создания связи типы первичного и внешнего ключа должны совпадать.",
invalid_relationship: {
title: "Недопустимая связь",
description: "Тип исходного ключа не совпадает с типом связанного ключа. Убедитесь, что оба ключа имеют одинаковый тип данных."
},
circular_dependency: {
title: "Обнаружена циклическая зависимость",
toast_description: "Обнаружена циклическая ссылка между таблицами. Проверьте диаграмму слева и удалите одну из связей, чтобы исправить.",
description: "В вашей схеме есть циклическая связь между таблицами. Чтобы устранить её,",
suggestion: "удалите одну из перечисленных ниже связей, вызывающих цикл.",
remove_relationship: "Удалить связь"
}
},
table: {
double_click: "Дважды щелкните для редактирования",
overlapping_tables: "Перекрывающиеся таблицы",
show_more: "Показать больше",
show_less: "Показать меньше"
},
control_buttons: {
redo: "Повтор",
undo: "Отменить",
zoom_in: "Увеличить",
zoom_out: "Уменьшить",
adjust_positions: "Настроить позиции",
show_all: "Показать все"
},
menu: {
file: "Файл",
new: "Новый",
open: "Открыть",
save: "Сохранить",
import: "Импорт",
json: ".json",
dbml: ".dbml",
mysql: "MySql",
postgresql: "PostgreSQL",
export_sql: "Экспорт SQL",
generic: "Общий",
export_orm_models: "Экспорт ORM моделей",
delete_project: "Удалить проект",
edit: "Редактировать",
undo: "Отменить",
redo: "Повторить",
clear: "Очистить",
view: "Вид",
hide_controller: "Скрыть панель управления",
show_controller: "Показать панель управления",
cardinality_style: "Стиль кардинальности",
hidden: "Скрытый",
numeric: "Числовой",
symbolic: "Символический",
theme: "Тема",
light: "Светлая",
dark: "Тёмная",
help: "Помощь",
show_docs: "Показать документацию",
join_discord: "Присоединиться к Discord"
},
modals: {
close: "Закрыть",
create: "Создать",
pick_database: "Выберите вашу базу данных.",
create_database_header: "Каждая база данных предлагает уникальные функции и возможности.",
db_name: "Имя базы данных",
db_name_error: "Пожалуйста, укажите имя базы данных",
continue: "Продолжить",
open: "Открыть",
open_database: "Открыть базу данных",
open_database_header: "Откройте базу данных, выбрав одну из списка.",
delete_database: "Удалить базу данных",
delete_database_content: "Это действие необратимо и навсегда удалит диаграмму.",
delete: "Удалить",
import_database: {
title: "Импортируйте вашу базу данных",
import: "Импорт",
import_options: "Вы хотите импортировать с помощью:",
import_error: "Ошибка разбора SQL",
import_error_description: "Не удалось импортировать SQL, так как он содержит недопустимый синтаксис.",
import_warning: "Предупреждение разбора SQL",
import_warning_description: "Некоторые элементы не были обработаны из-за неподдерживаемых или неполных объявлений."
},
export_sql: "Экспорт SQL",
export_sql_header: "Экспортируйте диаграмму базы данных в виде SQL-кода"
},
clipboard: {
copy: "Копировать",
copied: "Скопировано"
},
connection_status: {
online: "Онлайн",
offline: "Оффлайн",
saving: "Сохранение",
saved: "Сохранено",
last_synced: "Последняя синхронизация",
min_ago: "мин назад",
hour_ago: "час назад",
just_now: "Только что"
},
import: {
instructions: "Инструкции",
install: "Установить",
run_command: "Выполните следующую команду в терминале.",
example: "Пример",
copy_code: "Скопируйте содержимое .sql файла в кодовую секцию ниже.",
pg_admin: {
step1: "Откройте <bold>Pg Admin</bold>.",
step2: "Щёлкните правой кнопкой мыши по базе данных и выберите <bold>Резервное копирование</bold>.",
step3: "Назовите файл <code>.sql</code>, выберите <bold>Формат: Обычный</bold> и <bold>Кодировка: UTF8</bold>.",
step4: "Убедитесь, что <bold>Только схема</bold> включена, а <bold>Только данные</bold> выключены.",
step5: "Нажмите <bold>Резервное копирование</bold> для экспорта, затем скопируйте содержимое в редактор кода ниже."
},
workbench: {
step1: "Откройте <bold>MySQL Workbench</bold> и <bold>подключитесь</bold> к серверу.",
step2: "В верхнем меню перейдите в <bold>Сервер > Экспорт данных</bold>.",
step3: "Выберите <bold>Только структура</bold> в <bold>Настройках экспорта</bold>.",
step4: "Выберите <bold>Экспорт в автономный файл</bold>, укажите путь и имя файла <code>.sql</code>.",
step5: "Нажмите <bold>Начать экспорт</bold>, затем скопируйте содержимое в редактор кода ниже."
},
heidisql: {
step1: "Откройте <bold>HeidiSQL</bold> и подключитесь к серверу.",
step2: "В <bold>левой панели</bold> щёлкните правой кнопкой по нужной базе.",
step3: "Выберите <bold>Экспортировать базу как SQL</bold>.",
step4: "Выберите <bold>Без данных</bold>, включите <bold>Создание</bold> для экспорта только структуры.",
step5: "Нажмите <bold>Экспорт</bold> и скопируйте содержимое файла <code>.sql</code> в редактор."
},
dbbrowser: {
step1: "Запустите <bold>DB Browser for SQLite</bold>.",
step2: "Перейдите в <bold>Файл > Открыть базу данных</bold> и выберите <code>.sqlite</code> или <code>.db</code> файл.",
step3: "Выберите <bold>Файл > Экспорт > База данных в SQL файл</bold>.",
step4: "Выберите <bold>Экспортировать только схему</bold> и нажмите <bold>Сохранить</bold>.",
step5: "Скопируйте содержимое <code>.sql</code> файла в редактор ниже."
}
}
}
}
export const ruLanguage: Language = {
name: "Russian",
nativeName: "Русский",
code: "ru",
};
+272
View File
@@ -0,0 +1,272 @@
import { Language } from "../types";
export const zh = {
translation: {
sidebar: {
tables: "数据表",
relationships: "关系"
},
color_picker: {
default_color: "默认颜色"
},
navbar: {
rename_db: "重命名数据库",
search: "搜索"
},
db_controller: {
filter: "筛选",
add_table: "添加表",
add_field: "添加字段",
add_index: "添加索引",
delete_table: "删除表",
duplicate: "复制",
add_relationship: "添加关系",
show_code: "显示代码",
fields: "字段",
indexes: "索引",
note: "备注",
name: "名称",
type: "类型",
nullable: "可为空",
select_fields: "选择字段",
unique: "唯一",
table_note: "表备注",
collapse: "全部折叠",
primary_key: "主键",
foreign_key: "外键",
source_table: "源表",
referenced_table: "引用表",
select_table: "选择表",
select_field: "选择字段",
empty_list: {
no_tables: "暂无数据表",
no_tables_description: "创建一个表以开始。",
no_relationships: "暂无关系",
no_relationships_description: "创建关系以连接两个表"
},
cardinality: {
name: "基数",
one_to_one: "一对一",
one_to_many: "一对多",
many_to_one: "多对一",
many_to_many: "多对多"
},
foreign_key_actions: {
title: "外键操作",
on_delete: "删除时",
on_update: "更新时",
actions: {
no_action: "无操作",
cascade: "级联",
set_null: "设为 NULL",
set_default: "设为默认值",
restrict: "限制"
}
},
field_settings: {
title: "字段设置",
unique: "唯一",
unsigned: "无符号",
numeric_setting: "数值设置",
decimal_setting: "小数设置",
zeroFill: "零填充",
autoIncrement: "自动递增",
note: "备注",
delete_field: "删除字段",
field_note: "字段备注",
precision: "精度",
text_setting: "文本设置",
charset: "字符集",
collation: "排序规则",
scale: "小数位数",
max_length: "最大长度",
integer_width: "整数宽度",
width: "宽度",
default_value: "默认值",
value: "值",
length: "长度",
values: "值集合",
type_enter: "输入并按回车",
precision_def: "允许的总位数(小数点前+后)。",
scale_def: "小数点后的位数。",
time_default_value: {
no_value: "无值",
custom: "自定义时间",
now: "当前时间"
},
errors: {
max_length: "必须为正整数,不能为小数。",
integer_default_value: "整数默认值无效",
precision: "精度必须为正整数,不能为小数。",
scale: "小数位数必须为正整数,不能为小数。",
scale_max_value: "小数位数必须小于等于精度值。"
},
pick_value: "选择值"
},
delete: "删除",
index_setting: "索引设置",
table_actions: "表操作",
actions: "操作",
delete_index: "删除索引",
index_name: "索引名称",
create_relationship: "创建关系",
relationship_error: "要创建关系,主键和外键的数据类型必须相同。",
invalid_relationship: {
title: "无效关系",
description: "源键类型与引用键类型不匹配,请确保两个键的数据类型一致。"
},
circular_dependency: {
title: "检测到循环依赖",
toast_description: "发现表之间存在循环引用。请检查左侧图表并移除其中一个关系以修复。",
description: "您的架构中存在表之间的循环外键关系。要修复它,",
suggestion: "请移除以下导致循环的关系之一。",
remove_relationship: "移除关系"
}
},
table: {
double_click: "双击进行编辑",
overlapping_tables: "表重叠",
show_more: "显示更多",
show_less: "显示更少"
},
control_buttons: {
redo: "重做",
undo: "撤销",
zoom_in: "放大",
zoom_out: "缩小",
adjust_positions: "调整位置",
show_all: "显示全部"
},
menu: {
file: "文件",
new: "新建",
open: "打开",
save: "保存",
import: "导入",
json: ".json",
dbml: ".dbml",
mysql: "MySql",
postgresql: "Postgresql",
export_sql: "导出 SQL",
generic: "通用",
export_orm_models: "导出 ORM 模型",
delete_project: "删除项目",
edit: "编辑",
undo: "撤销",
redo: "重做",
clear: "清除",
view: "视图",
hide_controller: "隐藏控制器",
show_controller: "显示控制器",
cardinality_style: "基数样式",
hidden: "隐藏",
numeric: "数值",
symbolic: "符号",
theme: "主题",
light: "浅色",
dark: "深色",
help: "帮助",
show_docs: "查看文档",
join_discord: "加入 Discord"
},
modals: {
close: "关闭",
create: "创建",
pick_database: "选择您的数据库。",
create_database_header: "每种数据库提供不同的功能与特性。",
db_name: "数据库名称",
db_name_error: "请输入数据库名称",
continue: "继续",
open: "打开",
open_database: "打开数据库",
open_database_header: "从列表中选择一个数据库进行打开。",
delete_database: "删除数据库",
delete_database_content: "该操作不可撤销,将永久删除该图表。",
delete: "删除",
import_database: {
title: "导入数据库",
import: "导入",
import_options: "请选择导入方式:",
import_error: "SQL 解析错误",
import_error_description: "我们无法导入您的 SQL,因为它包含无效语法。",
import_warning: "SQL 解析警告",
import_warning_description: "由于不支持或不完整的声明,某些元素无法处理。"
},
export_sql: "导出 SQL",
export_sql_header: "将您的数据库图导出为 SQL 代码"
},
clipboard: {
copy: "复制",
copied: "已复制"
},
connection_status: {
online: "在线",
offline: "离线",
saving: "保存中",
saved: "已保存",
last_synced: "上次同步",
min_ago: "分钟前",
hour_ago: "小时前",
just_now: "刚刚"
},
import: {
instructions: "说明",
install: "安装",
run_command: "在终端中运行以下命令。",
example: "示例",
copy_code: "将 .sql 文件的内容复制到下方代码区域。",
pg_admin: {
step1: "打开 <bold>Pg Admin</bold>。",
step2: "右键点击数据库并选择 <bold>备份</bold>。",
step3: "命名 <code>.sql</code> 文件,设置格式为 <bold>纯文本</bold>,编码为 <bold>UTF8</bold>。",
step4: "确保 <bold>仅结构</bold> 选中,<bold>仅数据</bold> 未选中。",
step5: "点击 <bold>备份</bold> 进行导出,然后将内容复制到下方代码编辑器。"
},
workbench: {
step1: "打开 <bold>MySQL Workbench</bold> 并连接到服务器。",
step2: "顶部菜单选择 <bold>Server > 数据导出</bold>。",
step3: "在 <bold>导出选项</bold> 中选择 <bold>仅导出结构</bold>。",
step4: "勾选 <bold>导出为自包含文件</bold>,设置保存位置和文件名。",
step5: "点击 <bold>开始导出</bold>,然后复制 .sql 文件内容至代码编辑器。"
},
heidisql: {
step1: "<bold>打开 HeidiSQL</bold> 并连接到服务器。",
step2: "在 <bold>左侧栏中右键</bold> 要导出的数据库。",
step3: "选择 <bold>导出为 SQL</bold>。",
step4: "选择 <bold>无数据</bold>,并勾选 <bold>创建</bold> 以仅导出结构。",
step5: "点击 <bold>导出</bold>,将 .sql 文件内容复制到下方代码编辑器中。"
},
dbbrowser: {
step1: "启动 <bold>DB Browser for SQLite</bold>。",
step2: "点击 <bold>文件 > 打开数据库</bold>,选择您的 <code>.sqlite</code> 或 <code>.db</code> 文件。",
step3: "顶部菜单选择 <bold>文件 > 导出 > 导出为 SQL 文件</bold>。",
step4: "选择 <bold>仅导出结构</bold> 并点击 <bold>保存</bold>。",
step5: "将 .sql 文件内容复制到下方 <bold>代码编辑器</bold> 中。"
}
}
}
};
export const zhLanguage: Language = {
name: "Chinese",
nativeName: "简体中文",
code: "zh",
};
@@ -27,7 +27,7 @@ const RelationshipController: React.FC = ({ }) => {
const { open } = useModal();
const { database, isSyncing } = useDatabase();
const { database ,isLoading } = useDatabase();
const { relationships: allRelationships } = database || { relationships: [] };
const [relationships, setRelationships] = useState<RelationshipType[]>(allRelationships);
@@ -169,7 +169,7 @@ const RelationshipController: React.FC = ({ }) => {
{
!isSyncing && allRelationships.length == 0 &&
!isLoading && allRelationships.length == 0 &&
<EmptyList
title={t("db_controller.empty_list.no_relationships")}
description={t("db_controller.empty_list.no_relationships_description")}
+88 -6
View File
@@ -85,7 +85,7 @@ div[data-slot="content"] hr[role="separator"] {
}
}
/* Target the scrollbar */
@@ -132,7 +132,7 @@ div[data-slot="content"] hr[role="separator"] {
thead[role="rowgroup"] th {
border-radius: 0px !important;
@@ -205,8 +205,90 @@ button[data-testid="remove"] svg {
outline: none;
}
div[data-slot="calendar"] div[data-slot="input-wrapper"]{
div[data-slot="calendar"] div[data-slot="input-wrapper"] {
background-color: hsl(var(--heroui-default));
border : hsl(var(--heroui-divider))
}
border: hsl(var(--heroui-divider))
}
html {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.gh-button {
display: inline-block;
}
.gh-button {
box-sizing: border-box;
height: 30px;
font-weight: bold;
font-size: 11px;
line-height: 14px;
color: #333;
text-decoration: none;
text-shadow: 0 1px 0 #fff;
white-space: nowrap;
cursor: pointer;
overflow: hidden;
border-radius: 3px;
font-size: 16px;
line-height: 22px;
border-radius: 4px;
background-color: #eee;
background-image: linear-gradient(#fcfcfc, #eee);
border: 1px solid #d5d5d5;
}
.gh-button:hover,
.gh-button:focus {
text-decoration: none;
background-color: #ddd;
background-image: linear-gradient(#eee, #ddd);
border-color: #ccc;
}
.gh-button:active {
background: #dcdcdc;
border-color: #b5b5b5;
box-shadow: inset 0 2px 4px rgba(0, 0, 0, .15);
}
.gh-button__icon {
vertical-align: top;
min-width: 20px;
min-height: 20px;
background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIxMiAxMiA0MCA0MCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAxMiAxMiA0MCA0MCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8cGF0aCBmaWxsPSIjMzMzMzMzIiBkPSJNMzIsMTMuNGMtMTAuNSwwLTE5LDguNS0xOSwxOWMwLDguNCw1LjUsMTUuNSwxMywxOGMxLDAuMiwxLjMtMC40LDEuMy0wLjljMC0wLjUsMC0xLjcsMC0zLjINCgljLTUuMywxLjEtNi40LTIuNi02LjQtMi42QzIwLDQxLjYsMTguOCw0MSwxOC44LDQxYy0xLjctMS4yLDAuMS0xLjEsMC4xLTEuMWMxLjksMC4xLDIuOSwyLDIuOSwyYzEuNywyLjksNC41LDIuMSw1LjUsMS42DQoJYzAuMi0xLjIsMC43LTIuMSwxLjItMi42Yy00LjItMC41LTguNy0yLjEtOC43LTkuNGMwLTIuMSwwLjctMy43LDItNS4xYy0wLjItMC41LTAuOC0yLjQsMC4yLTVjMCwwLDEuNi0wLjUsNS4yLDINCgljMS41LTAuNCwzLjEtMC43LDQuOC0wLjdjMS42LDAsMy4zLDAuMiw0LjcsMC43YzMuNi0yLjQsNS4yLTIsNS4yLTJjMSwyLjYsMC40LDQuNiwwLjIsNWMxLjIsMS4zLDIsMywyLDUuMWMwLDcuMy00LjUsOC45LTguNyw5LjQNCgljMC43LDAuNiwxLjMsMS43LDEuMywzLjVjMCwyLjYsMCw0LjYsMCw1LjJjMCwwLjUsMC40LDEuMSwxLjMsMC45YzcuNS0yLjYsMTMtOS43LDEzLTE4LjFDNTEsMjEuOSw0Mi41LDEzLjQsMzIsMTMuNHoiLz4NCjwvc3ZnPg0K);
background-size: contain;
}
.dark .gh-button {
background-image: linear-gradient(#80838d22, #15171b55);
border-color: #333639aa;
}
.dark .gh-button .gh-button__icon {
filter: brightness(0) invert(1);
/* Makes dark content white */
}
.dark .gh-button:hover {
text-decoration: none;
background-color: #80838d22 !important;
border-color: #333639aa !important;
}
.dark .gh-button:active {
background-color: #80838d22 !important;
background-image: none !important;
}