Spaces:
Sleeping
Sleeping
Upload 214 files
Browse files- apps/web/index.html +21 -21
- packages/drawnix/src/components/toolbar/app-toolbar/language-switcher-menu.tsx +9 -0
- packages/drawnix/src/i18n/index.tsx +4 -3
- packages/drawnix/src/i18n/translations/ar.ts +7 -8
- packages/drawnix/src/i18n/translations/en.ts +1 -0
- packages/drawnix/src/i18n/translations/index.ts +2 -1
- packages/drawnix/src/i18n/translations/ru.ts +1 -0
- packages/drawnix/src/i18n/translations/vi.ts +174 -0
- packages/drawnix/src/i18n/translations/zh.ts +1 -0
- packages/drawnix/src/i18n/types.ts +2 -1
apps/web/index.html
CHANGED
|
@@ -3,30 +3,30 @@
|
|
| 3 |
<head>
|
| 4 |
<meta charset="utf-8" />
|
| 5 |
<!-- 基本 SEO Meta 标签 (中文) -->
|
| 6 |
-
<title>
|
| 7 |
-
<meta name="description" content="
|
| 8 |
-
<meta name="keywords" content="
|
| 9 |
<!-- 基本 SEO Meta 标签 (English) -->
|
| 10 |
-
<meta name="description" lang="en" content="
|
| 11 |
-
<meta name="keywords" lang="en" content="
|
| 12 |
<!-- 基本 SEO Meta 标签 (Русский) -->
|
| 13 |
-
<meta name="description" lang="ru" content="
|
| 14 |
-
<meta name="keywords" lang="ru" content="
|
| 15 |
<!-- Open Graph Meta 标签 (中文) -->
|
| 16 |
-
<meta property="og:title" content="
|
| 17 |
-
<meta property="og:description" content="
|
| 18 |
<meta property="og:type" content="website">
|
| 19 |
<meta property="og:url" content="https://drawnix.com">
|
| 20 |
-
<meta property="og:site_name" content="
|
| 21 |
<!-- Open Graph Meta 标签 (English) -->
|
| 22 |
-
<meta property="og:title" lang="en" content="
|
| 23 |
-
<meta property="og:description" lang="en" content="An integrated open-source whiteboard tool(online whiteboard | collaboration whiteboard) supporting mind mapping and flowcharts, built on the Plait framework"
|
| 24 |
<!-- Open Graph Meta 标签 (Русский) -->
|
| 25 |
-
|
| 26 |
-
|
| 27 |
<!-- Twitter Card Meta 标签 (English) -->
|
| 28 |
<meta name="twitter:card" content="summary_large_image">
|
| 29 |
-
|
| 30 |
<meta name="twitter:description" content="An integrated open-source whiteboard tool(online whiteboard | collaboration whiteboard) supporting mind mapping and flowcharts, built on the Plait framework">
|
| 31 |
<!-- 其他重要 Meta 标签 -->
|
| 32 |
<meta name="robots" content="index, follow">
|
|
@@ -42,12 +42,12 @@
|
|
| 42 |
{
|
| 43 |
"@context": "https://schema.org",
|
| 44 |
"@type": "SoftwareApplication",
|
| 45 |
-
"name": "
|
| 46 |
-
"alternateName": ["
|
| 47 |
"description": {
|
| 48 |
-
"zh-CN": "
|
| 49 |
-
"en": "
|
| 50 |
-
"ru": "
|
| 51 |
},
|
| 52 |
"url": "https://drawnix.com",
|
| 53 |
"applicationCategory": "DesignApplication",
|
|
@@ -59,7 +59,7 @@
|
|
| 59 |
},
|
| 60 |
"creator": {
|
| 61 |
"@type": "Organization",
|
| 62 |
-
"name": "
|
| 63 |
},
|
| 64 |
"keywords": ["доска", "электронная доска", "mind-карты", "блок-схемы", "диаграммы", "whiteboard", "mind mapping", "flowchart", "open source", "思维导图", "流程图", "白板"],
|
| 65 |
"inLanguage": ["zh-CN", "en", "ru"],
|
|
|
|
| 3 |
<head>
|
| 4 |
<meta charset="utf-8" />
|
| 5 |
<!-- 基本 SEO Meta 标签 (中文) -->
|
| 6 |
+
<title>NgocAnh - Công cụ bảng trắng mã nguồn mở</title>
|
| 7 |
+
<meta name="description" content="NgocAnh là một công cụ bảng trắng mã nguồn mở mạnh mẽ (https://github.com/plait-board/drawnix), tích hợp chức năng sơ đồ tư duy, sơ đồ luồng. Được phát triển dựa trên framework Plait, hỗ trợ mở rộng plugin, cung cấp tự động lưu, canvas vô hạn và nhiều tính năng khác. Vẽ vượt xa, vươn lên cao."
|
| 8 |
+
<meta name="keywords" content="NgocAnh,công cụ bảng trắng,bảng trắng,sơ đồ tư duy,sơ đồ luồng,bảng trắng mã nguồn mở,sơ đồ tư duy mã nguồn mở,vẽ trực tuyến,bảng trắng trực tuyến,công cụ cộng tác,bảng trắng cộng tác,Plait framework">
|
| 9 |
<!-- 基本 SEO Meta 标签 (English) -->
|
| 10 |
+
<meta name="description" lang="en" content="NgocAnh is a powerful open-source whiteboard tool featuring mind mapping and flowchart capabilities. Built on the Plait framework, it offers plugin extensibility, auto-save, infinite canvas, and more. Draw Beyond, Rise Above."
|
| 11 |
+
<meta name="keywords" lang="en" content="NgocAnh,whiteboard tool, whiteboard,mind mapping,flowchart,open source whiteboard, open source mind mapping,online drawing,collaboration tool, collaboration whiteboard,Plait framework">
|
| 12 |
<!-- 基本 SEO Meta 标签 (Русский) -->
|
| 13 |
+
<meta name="description" lang="ru" content="NgocAnh — это виртуальная доска с открытым исходным кодом, позволяющая строить mind-карты и блок-схемы. Написанный на основе фреймворка Plait, он имеет возможности расширения плагинами, автосохранения, бесконечного холта и многое другое. Draw Beyond, Rise Above."
|
| 14 |
+
<meta name="keywords" lang="ru" content="NgocAnh,доска,виртуальная доска,mind-карты,интеллект-карты,карты мыслей,блоксхемы,блок-схемы,open source доска,доска с открытым кодом,open source mind-карты,mind-карты с открытым кодом,онлайн-рисование,рисовалка онлайн,совместная работа,доска для совместной работы,электронная доска для совместной работы,Plait framework,фреймворк Plait">
|
| 15 |
<!-- Open Graph Meta 标签 (中文) -->
|
| 16 |
+
<meta property="og:title" content="NgocAnh - Công cụ bảng trắng mã nguồn mở | Sơ đồ tư duy | Sơ đồ luồng | Bảng trắng | Bảng trắng cộng tác">
|
| 17 |
+
<meta property="og:description" content="Công cụ bảng trắng mã nguồn mở tích hợp (bảng trắng trực tuyến | bảng trắng cộng tác), hỗ trợ sơ đồ tư duy, sơ đồ luồng, được phát triển dựa trên framework Plait">
|
| 18 |
<meta property="og:type" content="website">
|
| 19 |
<meta property="og:url" content="https://drawnix.com">
|
| 20 |
+
<meta property="og:site_name" content="NgocAnh">
|
| 21 |
<!-- Open Graph Meta 标签 (English) -->
|
| 22 |
+
<meta property="og:title" lang="en" content="Ngocanh - Open Source Whiteboard | Mind Mapping | Flowchart | Whiteboard | Collaboration Whiteboard"
|
| 23 |
+
<meta property="og:description" lang="en" content="An integrated open-source whiteboard tool(online whiteboard | collaboration whiteboard) supporting mind mapping and flowcharts, built on the Plait framework"
|
| 24 |
<!-- Open Graph Meta 标签 (Русский) -->
|
| 25 |
+
<meta property="og:title" lang="ru" content="Ngocanh - Открытая виртуальная доска | Mind-карты | Блок-схемы | Доска | Коллаборативная доска"
|
| 26 |
+
<meta property="og:description" lang="ru" content="Интегрированный инструмент виртуальной доски с открытым исходным кодом (онлайн-доска | коллаборативная доска), поддерживающий mind-карты и блок-схемы, построенный на фреймворке Plait"
|
| 27 |
<!-- Twitter Card Meta 标签 (English) -->
|
| 28 |
<meta name="twitter:card" content="summary_large_image">
|
| 29 |
+
<meta name="twitter:title" content="Ngocanh - Công cụ bảng trắng mã nguồn mở | Sơ đồ tư duy | Sơ đồ luồng | Bảng trắng | Bảng trắng cộng tác"
|
| 30 |
<meta name="twitter:description" content="An integrated open-source whiteboard tool(online whiteboard | collaboration whiteboard) supporting mind mapping and flowcharts, built on the Plait framework">
|
| 31 |
<!-- 其他重要 Meta 标签 -->
|
| 32 |
<meta name="robots" content="index, follow">
|
|
|
|
| 42 |
{
|
| 43 |
"@context": "https://schema.org",
|
| 44 |
"@type": "SoftwareApplication",
|
| 45 |
+
"name": "Ngocanh",
|
| 46 |
+
"alternateName": ["Công cụ bảng trắng mã nguồn mở", "Open Source Whiteboard Tool"],
|
| 47 |
"description": {
|
| 48 |
+
"zh-CN": "Ngocanh là một công cụ bảng trắng mã nguồn mở mạnh mẽ, tích hợp chức năng sơ đồ tư duy, sơ đồ luồng. Được phát triển dựa trên framework Plait, hỗ trợ mở rộng plugin, cung cấp tự động lưu, canvas vô hạn và nhiều tính năng khác.",
|
| 49 |
+
"en": "Ngocanh is a powerful open-source whiteboard tool featuring mind mapping and flowchart capabilities. Built on the Plait framework, it offers plugin extensibility, auto-save, infinite canvas, and more.",
|
| 50 |
+
"ru": "Ngocanh — это мощная виртуальная доска с открытым исходным кодом, позволяющая строить mind-карты и блок-схемы. Написанный на основе фреймворка Plait, он имеет возможности расширения плагинами, автосохранения, бесконечного холта и многое другое."
|
| 51 |
},
|
| 52 |
"url": "https://drawnix.com",
|
| 53 |
"applicationCategory": "DesignApplication",
|
|
|
|
| 59 |
},
|
| 60 |
"creator": {
|
| 61 |
"@type": "Organization",
|
| 62 |
+
"name": "Ngocanh Team"
|
| 63 |
},
|
| 64 |
"keywords": ["доска", "электронная доска", "mind-карты", "блок-схемы", "диаграммы", "whiteboard", "mind mapping", "flowchart", "open source", "思维导图", "流程图", "白板"],
|
| 65 |
"inLanguage": ["zh-CN", "en", "ru"],
|
packages/drawnix/src/components/toolbar/app-toolbar/language-switcher-menu.tsx
CHANGED
|
@@ -60,6 +60,15 @@ export const LanguageSwitcherMenu = () => {
|
|
| 60 |
selected={language === 'ar'}
|
| 61 |
>{t('language.arabic')}
|
| 62 |
</MenuItem>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 63 |
</Menu>
|
| 64 |
}
|
| 65 |
aria-label={t('language.switcher')}
|
|
|
|
| 60 |
selected={language === 'ar'}
|
| 61 |
>{t('language.arabic')}
|
| 62 |
</MenuItem>
|
| 63 |
+
<MenuItem
|
| 64 |
+
onSelect={() => {
|
| 65 |
+
setLanguage('vi');
|
| 66 |
+
}}
|
| 67 |
+
aria-label={t('language.vietnamese')}
|
| 68 |
+
selected={language === 'vi'}
|
| 69 |
+
>
|
| 70 |
+
{t('language.vietnamese')}
|
| 71 |
+
</MenuItem>
|
| 72 |
</Menu>
|
| 73 |
}
|
| 74 |
aria-label={t('language.switcher')}
|
packages/drawnix/src/i18n/index.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
import React, { createContext, useContext, useState, useMemo } from 'react';
|
| 2 |
-
import { zhTranslations, enTranslations, ruTranslations,arTranslations } from './translations';
|
| 3 |
import { Language, Translations, I18nContextType, I18nProviderProps } from './types';
|
| 4 |
|
| 5 |
// Translation data
|
|
@@ -7,7 +7,8 @@ const translations: Record<Language, Translations> = {
|
|
| 7 |
zh: zhTranslations,
|
| 8 |
en: enTranslations,
|
| 9 |
ru: ruTranslations,
|
| 10 |
-
ar:arTranslations
|
|
|
|
| 11 |
};
|
| 12 |
|
| 13 |
// Create the context
|
|
@@ -15,7 +16,7 @@ const I18nContext = createContext<I18nContextType | undefined>(undefined);
|
|
| 15 |
|
| 16 |
export const I18nProvider: React.FC<I18nProviderProps> = ({
|
| 17 |
children,
|
| 18 |
-
defaultLanguage = '
|
| 19 |
}) => {
|
| 20 |
|
| 21 |
const [language, setLanguageState] = useState<Language>(() => {
|
|
|
|
| 1 |
import React, { createContext, useContext, useState, useMemo } from 'react';
|
| 2 |
+
import { zhTranslations, enTranslations, ruTranslations, arTranslations, viTranslations } from './translations';
|
| 3 |
import { Language, Translations, I18nContextType, I18nProviderProps } from './types';
|
| 4 |
|
| 5 |
// Translation data
|
|
|
|
| 7 |
zh: zhTranslations,
|
| 8 |
en: enTranslations,
|
| 9 |
ru: ruTranslations,
|
| 10 |
+
ar: arTranslations,
|
| 11 |
+
vi: viTranslations
|
| 12 |
};
|
| 13 |
|
| 14 |
// Create the context
|
|
|
|
| 16 |
|
| 17 |
export const I18nProvider: React.FC<I18nProviderProps> = ({
|
| 18 |
children,
|
| 19 |
+
defaultLanguage = 'vi',
|
| 20 |
}) => {
|
| 21 |
|
| 22 |
const [language, setLanguageState] = useState<Language>(() => {
|
packages/drawnix/src/i18n/translations/ar.ts
CHANGED
|
@@ -65,14 +65,13 @@ const arTranslations: Translations = {
|
|
| 65 |
"general.duplicate": "تكرار",
|
| 66 |
"general.delete": "حذف",
|
| 67 |
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
// Menu items
|
| 76 |
"menu.open": "فتح",
|
| 77 |
"menu.saveFile": "حفظ الملف",
|
| 78 |
"menu.exportImage": "تصدير صورة",
|
|
|
|
| 65 |
"general.duplicate": "تكرار",
|
| 66 |
"general.delete": "حذف",
|
| 67 |
|
| 68 |
+
// Language
|
| 69 |
+
"language.switcher": "اللغة",
|
| 70 |
+
"language.chinese": "中文",
|
| 71 |
+
"language.english": "English",
|
| 72 |
+
"language.russian": "Русский",
|
| 73 |
+
"language.arabic": "عربي",
|
| 74 |
+
"language.vietnamese": "Tiếng Việt", // Menu items
|
|
|
|
| 75 |
"menu.open": "فتح",
|
| 76 |
"menu.saveFile": "حفظ الملف",
|
| 77 |
"menu.exportImage": "تصدير صورة",
|
packages/drawnix/src/i18n/translations/en.ts
CHANGED
|
@@ -71,6 +71,7 @@ const enTranslations: Translations = {
|
|
| 71 |
'language.english': 'English',
|
| 72 |
'language.russian': 'Русский',
|
| 73 |
'language.arabic': 'عربي',
|
|
|
|
| 74 |
// Menu items
|
| 75 |
'menu.open': 'Open',
|
| 76 |
'menu.saveFile': 'Save File',
|
|
|
|
| 71 |
'language.english': 'English',
|
| 72 |
'language.russian': 'Русский',
|
| 73 |
'language.arabic': 'عربي',
|
| 74 |
+
'language.vietnamese': 'Tiếng Việt',
|
| 75 |
// Menu items
|
| 76 |
'menu.open': 'Open',
|
| 77 |
'menu.saveFile': 'Save File',
|
packages/drawnix/src/i18n/translations/index.ts
CHANGED
|
@@ -2,5 +2,6 @@ import zhTranslations from './zh';
|
|
| 2 |
import enTranslations from './en';
|
| 3 |
import ruTranslations from './ru';
|
| 4 |
import arTranslations from './ar';
|
|
|
|
| 5 |
|
| 6 |
-
export { zhTranslations, enTranslations, ruTranslations,arTranslations };
|
|
|
|
| 2 |
import enTranslations from './en';
|
| 3 |
import ruTranslations from './ru';
|
| 4 |
import arTranslations from './ar';
|
| 5 |
+
import viTranslations from './vi';
|
| 6 |
|
| 7 |
+
export { zhTranslations, enTranslations, ruTranslations, arTranslations, viTranslations };
|
packages/drawnix/src/i18n/translations/ru.ts
CHANGED
|
@@ -71,6 +71,7 @@ const ruTranslations: Translations = {
|
|
| 71 |
'language.english': 'English',
|
| 72 |
'language.russian': 'Русский',
|
| 73 |
'language.arabic': 'عربي',
|
|
|
|
| 74 |
|
| 75 |
// Menu items
|
| 76 |
'menu.open': 'Открыть',
|
|
|
|
| 71 |
'language.english': 'English',
|
| 72 |
'language.russian': 'Русский',
|
| 73 |
'language.arabic': 'عربي',
|
| 74 |
+
'language.vietnamese': 'Tiếng Việt',
|
| 75 |
|
| 76 |
// Menu items
|
| 77 |
'menu.open': 'Открыть',
|
packages/drawnix/src/i18n/translations/vi.ts
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { Translations } from '../types';
|
| 2 |
+
|
| 3 |
+
const viTranslations: Translations = {
|
| 4 |
+
// Toolbar items
|
| 5 |
+
'toolbar.hand': 'Bàn tay',
|
| 6 |
+
'toolbar.selection': 'Lựa chọn',
|
| 7 |
+
'toolbar.mind': 'Sơ đồ tư duy',
|
| 8 |
+
'toolbar.text': 'Văn bản',
|
| 9 |
+
'toolbar.arrow': 'Mũi tên',
|
| 10 |
+
'toolbar.shape': 'Hình dạng',
|
| 11 |
+
'toolbar.image': 'Hình ảnh',
|
| 12 |
+
'toolbar.extraTools': 'Công cụ mở rộng',
|
| 13 |
+
|
| 14 |
+
'toolbar.pen': 'Bút',
|
| 15 |
+
'toolbar.eraser': 'Tẩy',
|
| 16 |
+
|
| 17 |
+
'toolbar.arrow.straight': 'Thẳng',
|
| 18 |
+
'toolbar.arrow.elbow': 'Góc vuông',
|
| 19 |
+
'toolbar.arrow.curve': 'Cong',
|
| 20 |
+
|
| 21 |
+
'toolbar.shape.rectangle': 'Hình chữ nhật — R',
|
| 22 |
+
'toolbar.shape.ellipse': 'Hình elip — O',
|
| 23 |
+
'toolbar.shape.triangle': 'Tam giác',
|
| 24 |
+
'toolbar.shape.terminal': 'Đầu cuối',
|
| 25 |
+
'toolbar.shape.diamond': 'Hình thoi',
|
| 26 |
+
'toolbar.shape.parallelogram': 'Hình bình hành',
|
| 27 |
+
'toolbar.shape.roundRectangle': 'Hình chữ nhật bo góc',
|
| 28 |
+
|
| 29 |
+
// Zoom controls
|
| 30 |
+
'zoom.in': 'Phóng to — Cmd++',
|
| 31 |
+
'zoom.out': 'Thu nhỏ — Cmd+-',
|
| 32 |
+
'zoom.fit': 'Vừa màn hình',
|
| 33 |
+
'zoom.100': 'Phóng to 100%',
|
| 34 |
+
|
| 35 |
+
// Themes
|
| 36 |
+
'theme.default': 'Mặc định',
|
| 37 |
+
'theme.colorful': 'Nhiều màu',
|
| 38 |
+
'theme.soft': 'Nhẹ nhàng',
|
| 39 |
+
'theme.retro': 'Hoài cổ',
|
| 40 |
+
'theme.dark': 'Tối',
|
| 41 |
+
'theme.starry': 'Sao trời',
|
| 42 |
+
|
| 43 |
+
// Colors
|
| 44 |
+
'color.none': 'Màu chủ đề',
|
| 45 |
+
'color.unknown': 'Màu khác',
|
| 46 |
+
'color.default': 'Đen cơ bản',
|
| 47 |
+
'color.white': 'Trắng',
|
| 48 |
+
'color.gray': 'Xám',
|
| 49 |
+
'color.deepBlue': 'Xanh đậm',
|
| 50 |
+
'color.red': 'Đỏ',
|
| 51 |
+
'color.green': 'Xanh lá',
|
| 52 |
+
'color.yellow': 'Vàng',
|
| 53 |
+
'color.purple': 'Tím',
|
| 54 |
+
'color.orange': 'Cam',
|
| 55 |
+
'color.pastelPink': 'Hồng nhạt',
|
| 56 |
+
'color.cyan': 'Xanh lơ',
|
| 57 |
+
'color.brown': 'Nâu',
|
| 58 |
+
'color.forestGreen': 'Xanh rừng',
|
| 59 |
+
'color.lightGray': 'Xám nhạt',
|
| 60 |
+
|
| 61 |
+
// General
|
| 62 |
+
'general.undo': 'Hoán tác',
|
| 63 |
+
'general.redo': 'Làm lại',
|
| 64 |
+
'general.menu': 'Menu ứng dụng',
|
| 65 |
+
'general.duplicate': 'Nhân bản',
|
| 66 |
+
'general.delete': 'Xóa',
|
| 67 |
+
|
| 68 |
+
// Language
|
| 69 |
+
'language.switcher': 'Ngôn ngữ',
|
| 70 |
+
'language.chinese': '中文',
|
| 71 |
+
'language.english': 'English',
|
| 72 |
+
'language.russian': 'Русский',
|
| 73 |
+
'language.arabic': 'عربي',
|
| 74 |
+
'language.vietnamese': 'Tiếng Việt',
|
| 75 |
+
|
| 76 |
+
// Menu items
|
| 77 |
+
'menu.open': 'Mở',
|
| 78 |
+
'menu.saveFile': 'Lưu tệp',
|
| 79 |
+
'menu.exportImage': 'Xuất hình ảnh',
|
| 80 |
+
'menu.exportImage.png': 'PNG',
|
| 81 |
+
'menu.exportImage.jpg': 'JPG',
|
| 82 |
+
'menu.cleanBoard': 'Xóa bảng',
|
| 83 |
+
'menu.github': 'GitHub',
|
| 84 |
+
|
| 85 |
+
// Dialog translations
|
| 86 |
+
'dialog.mermaid.title': 'Mermaid sang NgocAnh',
|
| 87 |
+
'dialog.mermaid.description': 'Hiện tại hỗ trợ',
|
| 88 |
+
'dialog.mermaid.flowchart': 'sơ đồ luồng',
|
| 89 |
+
'dialog.mermaid.sequence': 'sơ đồ trình tự',
|
| 90 |
+
'dialog.mermaid.class': 'sơ đồ lớp',
|
| 91 |
+
'dialog.mermaid.otherTypes': 'và các loại khác',
|
| 92 |
+
'dialog.mermaid.syntax': 'Cú pháp Mermaid',
|
| 93 |
+
'dialog.mermaid.placeholder': 'Nhập cú pháp Mermaid của bạn ở đây...',
|
| 94 |
+
'dialog.mermaid.preview': 'Xem trước',
|
| 95 |
+
'dialog.mermaid.insert': 'Chèn',
|
| 96 |
+
'dialog.markdown.description': 'Chuyển đổi Markdown thành sơ đồ tư duy',
|
| 97 |
+
'dialog.markdown.syntax': 'Cú pháp Markdown',
|
| 98 |
+
'dialog.markdown.placeholder': 'Nhập nội dung Markdown của bạn ở đây...',
|
| 99 |
+
'dialog.markdown.preview': 'Xem trước',
|
| 100 |
+
'dialog.markdown.insert': 'Chèn',
|
| 101 |
+
'dialog.error.loadMermaid': 'Lỗi khi tải thư viện Mermaid',
|
| 102 |
+
|
| 103 |
+
// Extra tools menu items
|
| 104 |
+
'extraTools.mermaidToDrawnix': 'Mermaid sang NgocAnh',
|
| 105 |
+
'extraTools.markdownToDrawnix': 'Markdown sang NgocAnh',
|
| 106 |
+
|
| 107 |
+
// Clean confirm dialog
|
| 108 |
+
'cleanConfirm.title': 'Xóa bảng',
|
| 109 |
+
'cleanConfirm.description': 'Điều này sẽ xóa toàn bộ bảng. Bạn có muốn tiếp tục?',
|
| 110 |
+
'cleanConfirm.cancel': 'Hủy',
|
| 111 |
+
'cleanConfirm.ok': 'Đồng ý',
|
| 112 |
+
|
| 113 |
+
// Link popup items
|
| 114 |
+
'popupLink.delLink': 'Xóa liên kết',
|
| 115 |
+
|
| 116 |
+
// Tool popup items
|
| 117 |
+
'popupToolbar.fillColor': 'Màu tô',
|
| 118 |
+
'popupToolbar.fontColor': 'Màu phông',
|
| 119 |
+
'popupToolbar.link': 'Chèn liên kết',
|
| 120 |
+
'popupToolbar.stroke': 'Đường viền',
|
| 121 |
+
|
| 122 |
+
// Text placeholders
|
| 123 |
+
'textPlaceholders.link': 'Liên kết',
|
| 124 |
+
'textPlaceholders.text': 'Văn bản',
|
| 125 |
+
|
| 126 |
+
// Line tool
|
| 127 |
+
'line.source': 'Nguồn',
|
| 128 |
+
'line.target': 'Đích',
|
| 129 |
+
'line.arrow': 'Mũi tên',
|
| 130 |
+
'line.none': 'Không có',
|
| 131 |
+
|
| 132 |
+
// Stroke style
|
| 133 |
+
'stroke.solid': 'Đặc',
|
| 134 |
+
'stroke.dashed': 'Gạch đứt',
|
| 135 |
+
'stroke.dotted': 'Chấm',
|
| 136 |
+
|
| 137 |
+
// Markdown example
|
| 138 |
+
'markdown.example': `# Tiêu đề chính 🚀
|
| 139 |
+
|
| 140 |
+
## Tiêu đề phụ ✨
|
| 141 |
+
|
| 142 |
+
### Danh sách công việc 📝
|
| 143 |
+
|
| 144 |
+
- [ ] Nhiệm vụ 1
|
| 145 |
+
- [x] Nhiệm vụ hoàn thành ✅
|
| 146 |
+
- [ ] Nhiệm vụ quan trọng ⭐
|
| 147 |
+
- [ ] Nhiệm vụ con
|
| 148 |
+
- nếu thấy điều này
|
| 149 |
+
- thì đừng động vào nó 🛑 ✋
|
| 150 |
+
- 👾 💥 🏹 🎯
|
| 151 |
+
|
| 152 |
+
## Trai hay gái 👶 ❓ 🤷 ♂️ ♀️
|
| 153 |
+
|
| 154 |
+
### Xin chào thế giới 👋 🌍 ✨ 💻
|
| 155 |
+
|
| 156 |
+
#### Wow, một lập trình viên 🤯 ⌨️ 💡 👩 💻`,
|
| 157 |
+
|
| 158 |
+
// Draw elements text
|
| 159 |
+
'draw.lineText': 'Văn bản',
|
| 160 |
+
'draw.geometryText': 'Văn bản',
|
| 161 |
+
|
| 162 |
+
// Mind map elements text
|
| 163 |
+
'mind.centralText': 'Chủ đề trung tâm',
|
| 164 |
+
'mind.abstractNodeText': 'Tóm tắt',
|
| 165 |
+
|
| 166 |
+
'tutorial.title': 'NgocAnh',
|
| 167 |
+
'tutorial.description': 'Bảng trắng tất cả trong một, bao gồm sơ đồ tư duy, sơ đồ luồng, vẽ tự do và nhiều hơn nữa',
|
| 168 |
+
'tutorial.dataDescription': 'Tất cả dữ liệu được lưu trữ cục bộ trong trình duyệt của bạn',
|
| 169 |
+
'tutorial.appToolbar': 'Xuất, cài đặt ngôn ngữ, ...',
|
| 170 |
+
'tutorial.creationToolbar': 'Chọn một công cụ để bắt đầu sáng tác của bạn',
|
| 171 |
+
'tutorial.themeDescription': 'Chọn chủ đề phù hợp với phong cách của bạn',
|
| 172 |
+
};
|
| 173 |
+
|
| 174 |
+
export default viTranslations;
|
packages/drawnix/src/i18n/translations/zh.ts
CHANGED
|
@@ -71,6 +71,7 @@ const zhTranslations: Translations = {
|
|
| 71 |
'language.english': 'English',
|
| 72 |
'language.russian': 'Русский',
|
| 73 |
'language.arabic': 'عربي',
|
|
|
|
| 74 |
|
| 75 |
// Menu items
|
| 76 |
'menu.open': '打开',
|
|
|
|
| 71 |
'language.english': 'English',
|
| 72 |
'language.russian': 'Русский',
|
| 73 |
'language.arabic': 'عربي',
|
| 74 |
+
'language.vietnamese': 'Tiếng Việt',
|
| 75 |
|
| 76 |
// Menu items
|
| 77 |
'menu.open': '打开',
|
packages/drawnix/src/i18n/types.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
import { ReactNode } from 'react';
|
| 2 |
|
| 3 |
// Define supported languages
|
| 4 |
-
export type Language = 'zh' | 'en' | 'ru' | 'ar';
|
| 5 |
|
| 6 |
// Define translation keys and their corresponding values
|
| 7 |
export interface Translations {
|
|
@@ -75,6 +75,7 @@ export interface Translations {
|
|
| 75 |
'language.english': string;
|
| 76 |
'language.russian': string;
|
| 77 |
'language.arabic': string;
|
|
|
|
| 78 |
|
| 79 |
// Menu items
|
| 80 |
'menu.open': string;
|
|
|
|
| 1 |
import { ReactNode } from 'react';
|
| 2 |
|
| 3 |
// Define supported languages
|
| 4 |
+
export type Language = 'zh' | 'en' | 'ru' | 'ar' | 'vi';
|
| 5 |
|
| 6 |
// Define translation keys and their corresponding values
|
| 7 |
export interface Translations {
|
|
|
|
| 75 |
'language.english': string;
|
| 76 |
'language.russian': string;
|
| 77 |
'language.arabic': string;
|
| 78 |
+
'language.vietnamese': string;
|
| 79 |
|
| 80 |
// Menu items
|
| 81 |
'menu.open': string;
|