feat: add indonesian language (#186) @akmalsyrf

This commit is contained in:
Akmal Syarifuddin
2026-01-09 19:48:16 +07:00
committed by GitHub
parent c52139606c
commit 2ce342dc98
27 changed files with 570 additions and 23 deletions

View File

@@ -1,7 +1,12 @@
# FossFLOW - Isometric Diagramming Tool <img width="30" height="30" alt="fossflow" src="https://github.com/user-attachments/assets/56d78887-601c-4336-ab87-76f8ee4cde96" />
<p align="center">
<a href="README.md">English</a> | <a href="docs/README.cn.md">简体中文</a> | <a href="docs/README.es.md">Español</a> | <a href="docs/README.pt.md">Português</a> | <a href="docs/README.fr.md">Français</a> | <a href="docs/README.hi.md">हिन्दी</a> | <a href="docs/README.bn.md">বাংলা</a> | <a href="docs/README.ru.md">Русский</a>
<a href="README.md">English</a> | <a href="docs/README.cn.md">简体中文</a> | <a href="docs/README.es.md">Español</a> | <a href="docs/README.pt.md">Português</a> | <a href="docs/README.fr.md">Français</a> | <a href="docs/README.hi.md">हिन्दी</a> | <a href="docs/README.bn.md">বাংলা</a> | <a href="docs/README.ru.md">Русский</a> | <a href="docs/README.id.md">Bahasa Indonesia</a>
</p>
<p align="center">
<a href="https://trendshift.io/repositories/15118" target="_blank"><img src="https://trendshift.io/api/badge/repositories/15118" alt="stan-smith%2FFossFLOW | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
</p>
@@ -40,7 +45,7 @@ FossFLOW is a powerful, open-source Progressive Web App (PWA) for creating beaut
- **Reduced frame refresh delay, should look much smoother now**
### Multilingual Support
- **8 Languages Supported** - Full interface translation in English, Chinese (Simplified), Spanish, Portuguese (Brazilian), French, Hindi, Bengali, and Russian
- **9 Languages Supported** - Full interface translation in English, Chinese (Simplified), Spanish, Portuguese (Brazilian), French, Hindi, Bengali, Russian, and Indonesian
- **Language Selector** - Easy-to-use language switcher in the app header
- **Complete Translation** - All menus, dialogs, settings, tooltips, and help content translated
- **Locale-Aware** - Automatically detects and remembers your language preference

View File

@@ -1,7 +1,7 @@
# FossFLOW - আইসোমেট্রিক ডায়াগ্রাম টুল <img width="30" height="30" alt="fossflow" src="https://github.com/user-attachments/assets/56d78887-601c-4336-ab87-76f8ee4cde96" />
<p align="center">
<a href="../README.md">English</a> | <a href="README.cn.md">简体中文</a> | <a href="README.es.md">Español</a> | <a href="README.pt.md">Português</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.bn.md">বাংলা</a> | <a href="README.ru.md">Русский</a>
<a href="../README.md">English</a> | <a href="README.cn.md">简体中文</a> | <a href="README.es.md">Español</a> | <a href="README.pt.md">Português</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.bn.md">বাংলা</a> | <a href="README.ru.md">Русский</a> | <a href="README.id.md">Bahasa Indonesia</a>
</p>
<b>হ্যালো!</b> আমি Stan, যদি আপনি FossFLOW ব্যবহার করে থাকেন এবং এটি আপনাকে সাহায্য করেছে, <b>আমি সত্যিই প্রশংসা করব যদি আপনি কিছু ছোট দান করতে পারেন :)</b> আমি পূর্ণকালীন কাজ করি, এবং এই প্রকল্পে কাজ করার সময় খুঁজে পাওয়াটা যথেষ্ট চ্যালেঞ্জিং।

View File

@@ -1,7 +1,7 @@
# FossFLOW - 等距图表工具 <img width="30" height="30" alt="fossflow" src="https://github.com/user-attachments/assets/56d78887-601c-4336-ab87-76f8ee4cde96" />
<p align="center">
<a href="../README.md">English</a> | <a href="README.cn.md">简体中文</a>
<a href="../README.md">English</a> | <a href="README.cn.md">简体中文</a> | <a href="README.es.md">Español</a> | <a href="README.pt.md">Português</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.bn.md">বাংলা</a> | <a href="README.ru.md">Русский</a> | <a href="README.id.md">Bahasa Indonesia</a>
</p>
<b>嗨!</b> 我是 Stan如果您使用过 FossFLOW 并觉得它对您有帮助,<b>我会非常感激您能捐助一点点 :)</b> 我全职工作,抽时间来维护这个项目已经很不容易了。

View File

@@ -1,7 +1,7 @@
# FossFLOW - Herramienta de Diagramas Isométricos <img width="30" height="30" alt="fossflow" src="https://github.com/user-attachments/assets/56d78887-601c-4336-ab87-76f8ee4cde96" />
<p align="center">
<a href="../README.md">English</a> | <a href="README.cn.md">简体中文</a> | <a href="README.es.md">Español</a> | <a href="README.pt.md">Português</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.bn.md">বাংলা</a> | <a href="README.ru.md">Русский</a>
<a href="../README.md">English</a> | <a href="README.cn.md">简体中文</a> | <a href="README.es.md">Español</a> | <a href="README.pt.md">Português</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.bn.md">বাংলা</a> | <a href="README.ru.md">Русский</a> | <a href="README.id.md">Bahasa Indonesia</a>
</p>
<b>¡Hola!</b> Soy Stan, si has usado FossFLOW y te ha ayudado, <b>¡realmente agradecería si pudieras donar algo pequeño :)</b> Trabajo a tiempo completo, y encontrar tiempo para trabajar en este proyecto ya es bastante desafiante.

View File

@@ -1,7 +1,7 @@
# FossFLOW - Outil de Diagrammes Isométriques <img width="30" height="30" alt="fossflow" src="https://github.com/user-attachments/assets/56d78887-601c-4336-ab87-76f8ee4cde96" />
<p align="center">
<a href="../README.md">English</a> | <a href="README.cn.md">简体中文</a> | <a href="README.es.md">Español</a> | <a href="README.pt.md">Português</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.bn.md">বাংলা</a> | <a href="README.ru.md">Русский</a>
<a href="../README.md">English</a> | <a href="README.cn.md">简体中文</a> | <a href="README.es.md">Español</a> | <a href="README.pt.md">Português</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.bn.md">বাংলা</a> | <a href="README.ru.md">Русский</a> | <a href="README.id.md">Bahasa Indonesia</a>
</p>
<b>Salut !</b> C'est Stan, si vous avez utilisé FossFLOW et qu'il vous a aidé, <b>j'apprécierais vraiment si vous pouviez faire un petit don :)</b> Je travaille à temps plein, et trouver le temps de travailler sur ce projet est déjà assez difficile.

View File

@@ -1,7 +1,7 @@
# FossFLOW - आइसोमेट्रिक आरेख उपकरण <img width="30" height="30" alt="fossflow" src="https://github.com/user-attachments/assets/56d78887-601c-4336-ab87-76f8ee4cde96" />
<p align="center">
<a href="../README.md">English</a> | <a href="README.cn.md">简体中文</a> | <a href="README.es.md">Español</a> | <a href="README.pt.md">Português</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.bn.md">বাংলা</a> | <a href="README.ru.md">Русский</a>
<a href="../README.md">English</a> | <a href="README.cn.md">简体中文</a> | <a href="README.es.md">Español</a> | <a href="README.pt.md">Português</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.bn.md">বাংলা</a> | <a href="README.ru.md">Русский</a> | <a href="README.id.md">Bahasa Indonesia</a>
</p>
<b>नमस्ते!</b> मैं Stan हूं, यदि आपने FossFLOW का उपयोग किया है और इसने आपकी मदद की है, <b>तो मैं वास्तव में सराहना करूंगा यदि आप कुछ छोटा दान कर सकें :)</b> मैं पूर्णकालिक काम करता हूं, और इस परियोजना पर काम करने के लिए समय निकालना पर्याप्त चुनौतीपूर्ण है।

209
docs/README.id.md Normal file
View File

@@ -0,0 +1,209 @@
# FossFLOW - Alat Diagram Isometrik <img width="30" height="30" alt="fossflow" src="https://github.com/user-attachments/assets/56d78887-601c-4336-ab87-76f8ee4cde96" />
<p align="center">
<a href="../README.md">English</a> | <a href="README.cn.md">简体中文</a> | <a href="README.es.md">Español</a> | <a href="README.pt.md">Português</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.bn.md">বাংলা</a> | <a href="README.ru.md">Русский</a> | <a href="README.id.md">Bahasa Indonesia</a>
</p>
<b>Halo!</b> Saya Stan, jika Anda telah menggunakan FossFLOW dan ini membantu Anda, <b>saya akan sangat menghargai jika Anda bisa menyumbang sesuatu yang kecil :)</b> Saya bekerja penuh waktu, dan menemukan waktu untuk mengerjakan proyek ini sudah cukup menantang.
Jika saya telah mengimplementasikan fitur untuk Anda atau memperbaiki bug, akan sangat bagus jika Anda bisa menyumbang :) jika tidak, tidak masalah, software ini akan selalu tetap gratis!
<b>Juga!</b> Jika Anda belum melakukannya, silakan lihat library dasar yang digunakan untuk membangun ini oleh <a href="https://github.com/markmanx/isoflow">@markmanx</a> Saya benar-benar berdiri di atas bahu raksasa di sini 🫡
[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/P5P61KBXA3)
<img width="30" height="30" alt="image" src="https://github.com/user-attachments/assets/dc6ec9ca-48d7-4047-94cf-5c4f7ed63b84" /> <b> https://buymeacoffee.com/stan.smith </b>
Terima kasih,
-Stan
## Coba Secara Online
Kunjungi <b> --> https://stan-smith.github.io/FossFLOW/ <-- </b>
------------------------------------------------------------------------------------------------------------------------------
FossFLOW adalah aplikasi web progresif (PWA) open-source yang powerful untuk membuat diagram isometrik yang indah. Dibangun dengan React dan library <a href="https://github.com/markmanx/isoflow">Isoflow</a> (Sekarang di-fork dan dipublikasikan ke NPM sebagai fossflow), berjalan sepenuhnya di browser Anda dengan dukungan offline.
![Screenshot_20250630_160954](https://github.com/user-attachments/assets/e7f254ad-625f-4b8a-8efc-5293b5be9d55)
- **📝 [FOSSFLOW_TODO.md](https://github.com/stan-smith/FossFLOW/blob/master/FOSSFLOW_TODO.md)** - Masalah saat ini dan roadmap dengan pemetaan codebase, sebagian besar keluhan adalah dengan library isoflow itu sendiri.
- **🤝 [CONTRIBUTORS.md](https://github.com/stan-smith/FossFLOW/blob/master/CONTRIBUTORS.md)** - Cara berkontribusi pada proyek.
## Pembaruan Terbaru (Oktober 2025)
### Pembaruan Performa
- **Mengurangi delay refresh frame, seharusnya terlihat lebih halus sekarang**
### Dukungan Multibahasa
- **9 Bahasa Didukung** - Terjemahan antarmuka lengkap dalam Bahasa Inggris, Cina (Sederhana), Spanyol, Portugis (Brasil), Prancis, Hindi, Bengali, Rusia, dan Bahasa Indonesia
- **Pemilih Bahasa** - Pengganti bahasa yang mudah digunakan di header aplikasi
- **Terjemahan Lengkap** - Semua menu, dialog, pengaturan, tooltip, dan konten bantuan diterjemahkan
- **Sadar Lokal** - Secara otomatis mendeteksi dan mengingat preferensi bahasa Anda
### Alat Konektor yang Ditingkatkan
- **Pembuatan Berbasis Klik** - Mode default baru: klik node pertama, lalu klik node kedua untuk terhubung
- **Opsi Mode Seret** - Drag-and-drop asli masih tersedia melalui pengaturan
- **Pemilihan Mode** - Beralih antara mode klik dan seret di Pengaturan → tab Konektor
- **Keandalan Lebih Baik** - Mode klik memberikan pembuatan koneksi yang lebih dapat diprediksi
### Impor Ikon Kustom
- **Impor Ikon Anda Sendiri** - Unggah ikon kustom (PNG, JPG, SVG) untuk digunakan dalam diagram Anda
- **Penskalaan Otomatis** - Ikon secara otomatis diskalakan ke ukuran yang konsisten untuk tampilan profesional
- **Toggle Isometrik/Datar** - Pilih apakah ikon yang diimpor muncul sebagai 3D isometrik atau 2D datar
- **Persistence Cerdas** - Ikon kustom disimpan dengan diagram dan bekerja di semua metode penyimpanan
- **Sumber Daya Ikon** - Temukan ikon gratis di:
- [Iconify Icon Sets](https://icon-sets.iconify.design/) - Ribuan ikon SVG gratis
- [Flaticon Isometric Icons](https://www.flaticon.com/free-icons/isometric) - Paket ikon isometrik berkualitas tinggi
### Dukungan Penyimpanan Server
- **Penyimpanan Persisten** - Diagram disimpan ke filesystem server, bertahan di seluruh sesi browser
- **Akses Multi-perangkat** - Akses diagram Anda dari perangkat apa pun saat menggunakan deployment Docker
- **Deteksi Otomatis** - UI secara otomatis menampilkan penyimpanan server saat tersedia
- **Perlindungan Penimpaan** - Dialog konfirmasi saat menyimpan dengan nama duplikat
- **Integrasi Docker** - Penyimpanan server diaktifkan secara default dalam deployment Docker
### Fitur Interaksi yang Ditingkatkan
- **Hotkey yang Dapat Dikonfigurasi** - Tiga profil (QWERTY, SMNRCT, None) untuk pemilihan alat dengan indikator visual
- **Kontrol Pan Lanjutan** - Beberapa metode pan termasuk seret area kosong, klik tengah/kanan, tombol modifier (Ctrl/Alt), dan navigasi keyboard (Arrow/WASD/IJKL)
- **Toggle Panah Konektor** - Opsi untuk menampilkan/menyembunyikan panah pada konektor individual
- **Pemilihan Alat Persisten** - Alat konektor tetap aktif setelah membuat koneksi
- **Dialog Pengaturan** - Konfigurasi terpusat untuk hotkey dan kontrol pan
### Peningkatan Docker & CI/CD
- **Build Docker Otomatis** - Workflow GitHub Actions untuk deployment Docker Hub otomatis pada commit
- **Dukungan Multi-arsitektur** - Image Docker untuk `linux/amd64` dan `linux/arm64`
- **Image Pra-dibangun** - Tersedia di `stnsmith/fossflow:latest`
### Arsitektur Monorepo
- **Repositori tunggal** untuk library dan aplikasi
- **NPM Workspaces** untuk manajemen dependensi yang efisien
- **Proses build terpadu** dengan `npm run build` di root
### Perbaikan UI
- Memperbaiki masalah tampilan ikon toolbar editor Quill
- Menyelesaikan peringatan key React di menu konteks
- Meningkatkan styling editor markdown
## Fitur
- 🎨 **Diagram Isometrik** - Buat diagram teknis bergaya 3D yang menakjubkan
- 💾 **Auto-Save** - Pekerjaan Anda secara otomatis disimpan setiap 5 detik
- 📱 **Dukungan PWA** - Instal sebagai aplikasi native di Mac dan Linux
- 🔒 **Privasi Pertama** - Semua data disimpan secara lokal di browser Anda
- 📤 **Impor/Ekspor** - Bagikan diagram sebagai file JSON
- 🎯 **Penyimpanan Sesi** - Simpan cepat tanpa dialog
- 🌐 **Dukungan Offline** - Bekerja tanpa koneksi internet
- 🗄️ **Penyimpanan Server** - Penyimpanan persisten opsional saat menggunakan Docker (diaktifkan secara default)
- 🌍 **Multibahasa** - Dukungan lengkap untuk 9 bahasa: English, 简体中文, Español, Português, Français, हिन्दी, বাংলা, Русский, Bahasa Indonesia
## 🐳 Deploy Cepat dengan Docker
```bash
# Menggunakan Docker Compose (disarankan - termasuk penyimpanan persisten)
docker compose up
# Atau jalankan langsung dari Docker Hub dengan penyimpanan persisten
docker run -p 80:80 -v $(pwd)/diagrams:/data/diagrams stnsmith/fossflow:latest
```
Penyimpanan server diaktifkan secara default di Docker. Diagram Anda akan disimpan ke `./diagrams` di host.
Untuk menonaktifkan penyimpanan server, set `ENABLE_SERVER_STORAGE=false`:
```bash
docker run -p 80:80 -e ENABLE_SERVER_STORAGE=false stnsmith/fossflow:latest
```
## Mulai Cepat (Pengembangan Lokal)
```bash
# Clone repositori
git clone https://github.com/stan-smith/FossFLOW
cd FossFLOW
# Install dependensi
npm install
# Build library (diperlukan pertama kali)
npm run build:lib
# Mulai development server
npm run dev
```
Buka [http://localhost:3000](http://localhost:3000) di browser Anda.
## Struktur Monorepo
Ini adalah monorepo yang berisi dua paket:
- `packages/fossflow-lib` - Library komponen React untuk menggambar diagram jaringan (dibangun dengan Webpack)
- `packages/fossflow-app` - Progressive Web App untuk membuat diagram isometrik (dibangun dengan RSBuild)
### Perintah Pengembangan
```bash
# Pengembangan
npm run dev # Mulai development server aplikasi
npm run dev:lib # Mode watch untuk pengembangan library
# Build
npm run build # Build library dan aplikasi
npm run build:lib # Build library saja
npm run build:app # Build aplikasi saja
# Testing & Linting
npm test # Jalankan unit test
npm run lint # Periksa error linting
# E2E Tests (Selenium)
cd e2e-tests
./run-tests.sh # Jalankan end-to-end tests (memerlukan Docker & Python)
# Publishing
npm run publish:lib # Publish library ke npm
```
## Cara Menggunakan
### Membuat Diagram
1. **Tambahkan Item**:
- Tekan tombol "+" di menu kanan atas, library komponen akan muncul di kiri
- Seret dan lepas komponen dari library ke kanvas
- Atau klik kanan pada grid dan pilih "Add node"
2. **Hubungkan Item**:
- Pilih alat Konektor (tekan 'C' atau klik ikon konektor)
- **Mode klik** (default): Klik node pertama, lalu klik node kedua
- **Mode seret** (opsional): Klik dan seret dari node pertama ke node kedua
- Beralih mode di Pengaturan → tab Konektor
3. **Simpan Pekerjaan Anda**:
- **Simpan Cepat** - Menyimpan ke sesi browser
- **Ekspor** - Unduh sebagai file JSON
- **Impor** - Muat dari file JSON
### Opsi Penyimpanan
- **Penyimpanan Sesi**: Simpan sementara yang dihapus saat browser ditutup
- **Ekspor/Impor**: Penyimpanan permanen sebagai file JSON
- **Auto-Save**: Secara otomatis menyimpan perubahan setiap 5 detik ke sesi
## Berkontribusi
Kami menyambut kontribusi! Silakan lihat [CONTRIBUTORS.md](../CONTRIBUTORS.md) untuk panduan.
## Dokumentasi
- [FOSSFLOW_ENCYCLOPEDIA.md](../FOSSFLOW_ENCYCLOPEDIA.md) - Panduan lengkap untuk codebase
- [FOSSFLOW_TODO.md](../FOSSFLOW_TODO.md) - Masalah saat ini dan roadmap
- [CONTRIBUTORS.md](../CONTRIBUTORS.md) - Panduan kontribusi
## Lisensi
MIT

View File

@@ -1,7 +1,7 @@
# FossFLOW - Ferramenta de Diagramas Isométricos <img width="30" height="30" alt="fossflow" src="https://github.com/user-attachments/assets/56d78887-601c-4336-ab87-76f8ee4cde96" />
<p align="center">
<a href="../README.md">English</a> | <a href="README.cn.md">简体中文</a> | <a href="README.es.md">Español</a> | <a href="README.pt.md">Português</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.bn.md">বাংলা</a> | <a href="README.ru.md">Русский</a>
<a href="../README.md">English</a> | <a href="README.cn.md">简体中文</a> | <a href="README.es.md">Español</a> | <a href="README.pt.md">Português</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.bn.md">বাংলা</a> | <a href="README.ru.md">Русский</a> | <a href="README.id.md">Bahasa Indonesia</a>
</p>
<b>Olá!</b> Aqui é o Stan, se você usou o FossFLOW e ele te ajudou, <b>eu realmente agradeceria se você pudesse doar algo pequeno :)</b> Eu trabalho em tempo integral, e encontrar tempo para trabalhar neste projeto já é desafiador o suficiente.

View File

@@ -1,7 +1,7 @@
# FossFLOW - Инструмент для изометрических диаграмм <img width="30" height="30" alt="fossflow" src="https://github.com/user-attachments/assets/56d78887-601c-4336-ab87-76f8ee4cde96" />
<p align="center">
<a href="../README.md">English</a> | <a href="README.cn.md">简体中文</a> | <a href="README.es.md">Español</a> | <a href="README.pt.md">Português</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.bn.md">বাংলা</a> | <a href="README.ru.md">Русский</a>
<a href="../README.md">English</a> | <a href="README.cn.md">简体中文</a> | <a href="README.es.md">Español</a> | <a href="README.pt.md">Português</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.bn.md">বাংলা</a> | <a href="README.ru.md">Русский</a> | <a href="README.id.md">Bahasa Indonesia</a>
</p>
<b>Привет!</b> Я Stan, если вы использовали FossFLOW и это помогло вам, <b>я буду очень признателен, если вы сможете сделать небольшое пожертвование :)</b> Я работаю полный рабочий день, и найти время для работы над этим проектом достаточно сложно.

View File

@@ -0,0 +1,63 @@
{
"nav": {
"newDiagram": "Diagram Baru",
"saveSessionOnly": "Simpan (Hanya Sesi)",
"loadSessionOnly": "Muat (Hanya Sesi)",
"importFile": "Impor File",
"exportFile": "Ekspor File",
"quickSaveSession": "Simpan Cepat (Sesi)",
"serverStorage": "Penyimpanan Server"
},
"status": {
"current": "Saat Ini",
"untitled": "Diagram Tanpa Judul",
"modified": "Dimodifikasi",
"sessionStorageNote": "Hanya penyimpanan sesi - ekspor untuk menyimpan secara permanen"
},
"dialog": {
"save": {
"title": "Simpan Diagram (Hanya Sesi Saat Ini)",
"warningTitle": "Penting",
"warningMessage": "Simpanan ini bersifat sementara dan akan hilang saat Anda menutup browser.",
"warningExport": "Gunakan <strong>Ekspor File</strong> untuk menyimpan pekerjaan Anda secara permanen.",
"placeholder": "Masukkan nama diagram",
"btnSave": "Simpan",
"btnCancel": "Batal"
},
"load": {
"title": "Muat Diagram (Hanya Sesi Saat Ini)",
"noteTitle": "Catatan",
"noteMessage": "Simpanan ini bersifat sementara. Ekspor diagram Anda untuk menyimpannya secara permanen.",
"noSavedDiagrams": "Tidak ada diagram tersimpan yang ditemukan dalam sesi ini",
"updated": "Diperbarui",
"btnLoad": "Muat",
"btnDelete": "Hapus",
"btnClose": "Tutup"
},
"export": {
"title": "Ekspor Diagram",
"recommendedTitle": "Direkomendasikan",
"recommendedMessage": "Ini adalah cara terbaik untuk menyimpan pekerjaan Anda secara permanen.",
"noteMessage": "File JSON yang diekspor dapat diimpor nanti atau dibagikan dengan orang lain.",
"btnDownload": "Unduh JSON",
"btnCancel": "Batal"
},
"readOnly": {
"mode": "Mode Hanya Baca",
"failed": "Gagal memuat diagram"
}
},
"alert": {
"enterDiagramName": "Silakan masukkan nama diagram",
"diagramExists": "Diagram dengan nama \"{{name}}\" sudah ada dalam sesi ini. Ini akan menimpanya. Apakah Anda yakin ingin melanjutkan?",
"unsavedChanges": "Anda memiliki perubahan yang belum disimpan. Lanjutkan memuat?",
"createNewDiagram": "Buat diagram baru?",
"unsavedChangesExport": "Anda memiliki perubahan yang belum disimpan. Ekspor diagram Anda terlebih dahulu untuk menyimpannya. Lanjutkan?",
"confirmDelete": "Apakah Anda yakin ingin menghapus diagram ini?",
"storageFull": "Penyimpanan penuh! Membuka Manajer Penyimpanan...",
"autoSaveFailed": "Penyimpanan penuh! Silakan gunakan Manajer Penyimpanan untuk membebaskan ruang.",
"beforeUnload": "Anda memiliki perubahan yang belum disimpan. Apakah Anda yakin ingin keluar?",
"quotaExceeded": "Kuota penyimpanan terlampaui. Silakan ekspor diagram penting dan kosongkan beberapa ruang."
}
}

View File

@@ -581,6 +581,9 @@ function EditorPage() {
// i18n
const { t, i18n } = useTranslation('app');
// Get locale with fallback to en-US if not found
const currentLocale = allLocales[i18n.language as keyof typeof allLocales] || allLocales['en-US'];
// Auto-save functionality
useEffect(() => {
@@ -785,11 +788,11 @@ function EditorPage() {
<div className="fossflow-container">
<Isoflow
key={fossflowKey}
key={`${fossflowKey}-${i18n.language}`}
initialData={diagramData}
onModelUpdated={handleModelUpdated}
editorMode={isReadonlyUrl ? 'EXPLORABLE_READONLY' : 'EDITABLE'}
locale={allLocales[i18n.language as keyof typeof allLocales]}
locale={currentLocale}
iconPackManager={{
lazyLoadingEnabled: iconPackManager.lazyLoadingEnabled,
onToggleLazyLoading: iconPackManager.toggleLazyLoading,

View File

@@ -63,6 +63,10 @@ export const supportedLanguages = [
{
label: 'Italian',
value: 'it-IT'
},
{
label: 'Bahasa Indonesia',
value: 'id-ID'
}
];

View File

File diff suppressed because one or more lines are too long

View File

@@ -2,8 +2,10 @@ import React, { useState, useEffect, useRef } from 'react';
import { Box, Paper, Typography, Fade } from '@mui/material';
import { useUiStateStore } from 'src/stores/uiStateStore';
import { useScene } from 'src/hooks/useScene';
import { useTranslation } from 'src/stores/localeStore';
export const ConnectorEmptySpaceTooltip = () => {
const { t } = useTranslation('connectorEmptySpaceTooltip');
const [showTooltip, setShowTooltip] = useState(false);
const [tooltipPosition, setTooltipPosition] = useState({ x: 0, y: 0 });
const mode = useUiStateStore((state) => state.mode);
@@ -88,7 +90,7 @@ export const ConnectorEmptySpaceTooltip = () => {
}}
>
<Typography variant="body2">
To connect this connector to a node, <strong>left-click on the end of the connector</strong> and drag it to the desired node.
{t('message')} <strong>{t('instruction')}</strong>
</Typography>
</Paper>
</Box>

View File

@@ -111,6 +111,10 @@ const locale: LocaleProps = {
instructionDrag: "টেনে আনুন",
instructionEnd: "এটি পরিবর্তন করতে!"
},
connectorEmptySpaceTooltip: {
message: "এই সংযোগকারীটিকে একটি নোডের সাথে সংযোগ করতে,",
instruction: "সংযোগকারীর শেষে বাম-ক্লিক করুন এবং এটিকে পছন্দসই নোডে টানুন।"
},
settings: {
zoom: {
description: "মাউস হুইল ব্যবহার করার সময় জুম আচরণ কনফিগার করুন।",

View File

@@ -111,6 +111,10 @@ const locale: LocaleProps = {
instructionDrag: "drag",
instructionEnd: "to change it!"
},
connectorEmptySpaceTooltip: {
message: "To connect this connector to a node,",
instruction: "left-click on the end of the connector and drag it to the desired node."
},
settings: {
zoom: {
description: "Configure zoom behavior when using the mouse wheel.",

View File

@@ -187,3 +187,4 @@ const locale: LocaleProps = {
};
export default locale;

View File

@@ -111,6 +111,10 @@ const locale: LocaleProps = {
instructionDrag: "glissez",
instructionEnd: "pour le modifier !"
},
connectorEmptySpaceTooltip: {
message: "Pour connecter ce connecteur à un nœud,",
instruction: "cliquez avec le bouton gauche sur l'extrémité du connecteur et faites-le glisser vers le nœud souhaité."
},
settings: {
zoom: {
description: "Configurer le comportement du zoom lors de l'utilisation de la molette de la souris.",

View File

@@ -111,6 +111,10 @@ const locale: LocaleProps = {
instructionDrag: "ड्रैग करें",
instructionEnd: "इसे बदलने के लिए!"
},
connectorEmptySpaceTooltip: {
message: "इस कनेक्टर को एक नोड से कनेक्ट करने के लिए,",
instruction: "कनेक्टर के अंत पर बाईं-क्लिक करें और इसे वांछित नोड पर खींचें।"
},
settings: {
zoom: {
description: "माउस व्हील का उपयोग करते समय ज़ूम व्यवहार को कॉन्फ़िगर करें।",

View File

@@ -0,0 +1,194 @@
import { LocaleProps } from '../types/isoflowProps';
const locale: LocaleProps = {
common: {
exampleText: "Ini adalah contoh teks"
},
mainMenu: {
undo: "Batalkan",
redo: "Ulangi",
open: "Buka",
exportJson: "Ekspor sebagai JSON",
exportCompactJson: "Ekspor sebagai JSON Ringkas",
exportImage: "Ekspor sebagai gambar",
clearCanvas: "Bersihkan kanvas",
settings: "Pengaturan",
gitHub: "GitHub"
},
helpDialog: {
title: "Pintasan Keyboard & Bantuan",
close: "Tutup",
keyboardShortcuts: "Pintasan Keyboard",
mouseInteractions: "Interaksi Mouse",
action: "Aksi",
shortcut: "Pintasan",
method: "Metode",
description: "Deskripsi",
note: "Catatan:",
noteContent: "Pintasan keyboard dinonaktifkan saat mengetik di bidang input, area teks, atau elemen yang dapat diedit untuk mencegah konflik.",
// Keyboard shortcuts
undoAction: "Batalkan",
undoDescription: "Batalkan aksi terakhir",
redoAction: "Ulangi",
redoDescription: "Ulangi aksi terakhir yang dibatalkan",
redoAltAction: "Ulangi (Alternatif)",
redoAltDescription: "Pintasan alternatif untuk mengulangi",
helpAction: "Bantuan",
helpDescription: "Buka dialog bantuan dengan pintasan keyboard",
zoomInAction: "Perbesar",
zoomInShortcut: "Roda Mouse Naik",
zoomInDescription: "Perbesar kanvas",
zoomOutAction: "Perkecil",
zoomOutShortcut: "Roda Mouse Turun",
zoomOutDescription: "Perkecil kanvas",
panCanvasAction: "Geser Kanvas",
panCanvasShortcut: "Klik Kiri + Seret",
panCanvasDescription: "Geser kanvas saat dalam mode Geser",
contextMenuAction: "Menu Konteks",
contextMenuShortcut: "Klik Kanan",
contextMenuDescription: "Buka menu konteks untuk item atau ruang kosong",
// Mouse interactions
selectToolAction: "Alat Pilih",
selectToolShortcut: "Klik tombol Pilih",
selectToolDescription: "Beralih ke mode pemilihan",
panToolAction: "Alat Geser",
panToolShortcut: "Klik tombol Geser",
panToolDescription: "Beralih ke mode geser untuk memindahkan kanvas",
addItemAction: "Tambah Item",
addItemShortcut: "Klik tombol Tambah item",
addItemDescription: "Buka pemilih ikon untuk menambahkan item baru",
drawRectangleAction: "Gambar Persegi Panjang",
drawRectangleShortcut: "Klik tombol Persegi Panjang",
drawRectangleDescription: "Beralih ke mode menggambar persegi panjang",
createConnectorAction: "Buat Konektor",
createConnectorShortcut: "Klik tombol Konektor",
createConnectorDescription: "Beralih ke mode konektor",
addTextAction: "Tambah Teks",
addTextShortcut: "Klik tombol Teks",
addTextDescription: "Buat kotak teks baru"
},
connectorHintTooltip: {
tipCreatingConnectors: "Tip: Membuat Konektor",
tipConnectorTools: "Tip: Alat Konektor",
clickInstructionStart: "Klik",
clickInstructionMiddle: "pada node atau titik pertama, lalu",
clickInstructionEnd: "pada node atau titik kedua untuk membuat koneksi.",
nowClickTarget: "Sekarang klik pada target untuk menyelesaikan koneksi.",
dragStart: "Seret",
dragEnd: "dari node pertama ke node kedua untuk membuat koneksi.",
rerouteStart: "Untuk mengubah rute konektor,",
rerouteMiddle: "klik kiri",
rerouteEnd: "pada titik mana pun di sepanjang garis konektor dan seret untuk membuat atau memindahkan titik jangkar."
},
lassoHintTooltip: {
tipLasso: "Tip: Seleksi Lasso",
tipFreehandLasso: "Tip: Seleksi Lasso Bebas",
lassoDragStart: "Klik dan seret",
lassoDragEnd: "untuk menggambar kotak seleksi persegi panjang di sekitar item yang ingin Anda pilih.",
freehandDragStart: "Klik dan seret",
freehandDragMiddle: "untuk menggambar",
freehandDragEnd: "bentuk bebas",
freehandComplete: "di sekitar item. Lepas untuk memilih semua item di dalam bentuk.",
moveStart: "Setelah dipilih,",
moveMiddle: "klik di dalam seleksi",
moveEnd: "dan seret untuk memindahkan semua item yang dipilih bersama."
},
importHintTooltip: {
title: "Impor Diagram",
instructionStart: "Untuk mengimpor diagram, klik",
menuButton: "tombol menu",
instructionMiddle: "(☰) di pojok kiri atas, lalu pilih",
openButton: "\"Buka\"",
instructionEnd: "untuk memuat file diagram Anda."
},
connectorRerouteTooltip: {
title: "Tip: Ubah Rute Konektor",
instructionStart: "Setelah konektor Anda ditempatkan, Anda dapat mengubah rutenya sesuai keinginan.",
instructionSelect: "Pilih konektor",
instructionMiddle: "terlebih dahulu, lalu",
instructionClick: "klik pada jalur konektor",
instructionAnd: "dan",
instructionDrag: "seret",
instructionEnd: "untuk mengubahnya!"
},
connectorEmptySpaceTooltip: {
message: "Untuk menghubungkan konektor ini ke node,",
instruction: "klik kiri pada ujung konektor dan seret ke node yang diinginkan."
},
settings: {
zoom: {
description: "Konfigurasi perilaku zoom saat menggunakan roda mouse.",
zoomToCursor: "Zoom ke Kursor",
zoomToCursorDesc: "Saat diaktifkan, zoom masuk/keluar terpusat pada posisi kursor mouse. Saat dinonaktifkan, zoom terpusat pada kanvas."
},
hotkeys: {
title: "Pengaturan Pintasan",
profile: "Profil Pintasan",
profileQwerty: "QWERTY (Q, W, E, R, T, Y)",
profileSmnrct: "SMNRCT (S, M, N, R, C, T)",
profileNone: "Tidak Ada Pintasan",
tool: "Alat",
hotkey: "Pintasan",
toolSelect: "Pilih",
toolPan: "Geser",
toolAddItem: "Tambah Item",
toolRectangle: "Persegi Panjang",
toolConnector: "Konektor",
toolText: "Teks",
note: "Catatan: Pintasan berfungsi saat tidak mengetik di bidang teks"
},
pan: {
title: "Pengaturan Geser",
mousePanOptions: "Opsi Geser Mouse",
emptyAreaClickPan: "Klik dan seret pada area kosong",
middleClickPan: "Klik tengah dan seret",
rightClickPan: "Klik kanan dan seret",
ctrlClickPan: "Ctrl + klik dan seret",
altClickPan: "Alt + klik dan seret",
keyboardPanOptions: "Opsi Geser Keyboard",
arrowKeys: "Tombol panah",
wasdKeys: "Tombol WASD",
ijklKeys: "Tombol IJKL",
keyboardPanSpeed: "Kecepatan Geser Keyboard",
note: "Catatan: Opsi geser berfungsi selain alat Geser khusus"
},
connector: {
title: "Pengaturan Konektor",
connectionMode: "Mode Pembuatan Koneksi",
clickMode: "Mode Klik (Direkomendasikan)",
clickModeDesc: "Klik node pertama, lalu klik node kedua untuk membuat koneksi",
dragMode: "Mode Seret",
dragModeDesc: "Klik dan seret dari node pertama ke node kedua",
note: "Catatan: Anda dapat mengubah pengaturan ini kapan saja. Mode yang dipilih akan digunakan saat alat Konektor aktif."
},
iconPacks: {
title: "Manajemen Paket Ikon",
lazyLoading: "Aktifkan Lazy Loading",
lazyLoadingDesc: "Muat paket ikon sesuai permintaan untuk startup yang lebih cepat",
availablePacks: "Paket Ikon Tersedia",
coreIsoflow: "Core Isoflow (Selalu Dimuat)",
alwaysEnabled: "Selalu diaktifkan",
awsPack: "Ikon AWS",
gcpPack: "Ikon Google Cloud",
azurePack: "Ikon Azure",
kubernetesPack: "Ikon Kubernetes",
loading: "Memuat...",
loaded: "Dimuat",
notLoaded: "Tidak dimuat",
iconCount: "{count} ikon",
lazyLoadingDisabledNote: "Lazy loading dinonaktifkan. Semua paket ikon dimuat saat startup.",
note: "Paket ikon dapat diaktifkan atau dinonaktifkan sesuai kebutuhan Anda. Paket yang dinonaktifkan akan mengurangi penggunaan memori dan meningkatkan performa."
}
},
lazyLoadingWelcome: {
title: "Fitur Baru: Lazy Loading!",
message: "Hai! Setelah banyak permintaan, kami telah mengimplementasikan Lazy Loading ikon, jadi sekarang jika Anda ingin mengaktifkan paket ikon non-standar, Anda dapat mengaktifkannya di bagian 'Konfigurasi'.",
configPath: "Klik pada ikon Hamburger",
configPath2: "di kiri atas untuk mengakses Konfigurasi.",
canDisable: "Anda dapat menonaktifkan perilaku ini jika diinginkan.",
signature: "-Stan"
}
};
export default locale;

View File

@@ -7,6 +7,8 @@ import hiIN from './hi-IN';
import bnBD from './bn-BD';
import ruRU from './ru-RU';
import plPL from './pl-PL';
import idID from './id-ID';
import itIT from './it-IT';
const locales = {
'en-US': enUS,
@@ -17,7 +19,9 @@ const locales = {
'hi-IN': hiIN,
'bn-BD': bnBD,
'ru-RU': ruRU,
'pl-PL': plPL
'pl-PL': plPL,
'id-ID': idID,
'it-IT': itIT
};
export default locales;

View File

@@ -111,6 +111,10 @@ const locale: LocaleProps = {
instructionDrag: "trascina",
instructionEnd: "per modificarlo!"
},
connectorEmptySpaceTooltip: {
message: "Per collegare questo connettore a un nodo,",
instruction: "clicca con il tasto sinistro sulla fine del connettore e trascinalo sul nodo desiderato."
},
settings: {
zoom: {
description: "Configura il comportamento dello zoom quando si usa la rotella del mouse.",

View File

@@ -111,6 +111,10 @@ const locale: LocaleProps = {
instructionDrag: "przesuń",
instructionEnd: "aby zmienić!"
},
connectorEmptySpaceTooltip: {
message: "Aby połączyć to połączenie z węzłem,",
instruction: "kliknij lewym przyciskiem myszy koniec połączenia i przeciągnij go do żądanego węzła."
},
settings: {
zoom: {
description: "Skonfiguruj zachowanie powiększania podczas korzystania z kółka myszy.",

View File

@@ -111,6 +111,10 @@ const locale: LocaleProps = {
instructionDrag: "arraste",
instructionEnd: "para alterá-lo!"
},
connectorEmptySpaceTooltip: {
message: "Para conectar este conector a um nó,",
instruction: "clique com o botão esquerdo na extremidade do conector e arraste-o para o nó desejado."
},
settings: {
zoom: {
description: "Configurar o comportamento do zoom ao usar a roda do mouse.",

View File

@@ -111,6 +111,10 @@ const locale: LocaleProps = {
instructionDrag: "перетащите",
instructionEnd: "чтобы изменить его!"
},
connectorEmptySpaceTooltip: {
message: "Чтобы подключить этот соединитель к узлу,",
instruction: "щелкните левой кнопкой мыши на конце соединителя и перетащите его к нужному узлу."
},
settings: {
zoom: {
description: "Настройте поведение масштабирования при использовании колесика мыши.",

View File

@@ -111,6 +111,10 @@ const locale: LocaleProps = {
instructionDrag: "拖拽",
instructionEnd: "即可更改!"
},
connectorEmptySpaceTooltip: {
message: "要将此连接器连接到节点,",
instruction: "左键单击连接器末端并将其拖动到所需节点。"
},
settings: {
zoom: {
description: "配置使用鼠标滚轮时的缩放行为。",

View File

@@ -118,6 +118,10 @@ export interface LocaleProps {
instructionDrag: string;
instructionEnd: string;
};
connectorEmptySpaceTooltip: {
message: string;
instruction: string;
};
settings: {
zoom: {
description: string;