From cfec10b1bf04643f11e8a8ee5b3a8d3bd1ac1070 Mon Sep 17 00:00:00 2001
From: koichixD <207069770+koichixD@users.noreply.github.com>
Date: Mon, 9 Feb 2026 21:49:24 +0100
Subject: [PATCH] More languages added & version number finally set to 0.5.1.
---
package.json | 2 +-
public/flags/it.svg | 5 +
public/flags/pl.svg | 4 +
public/flags/pt-br.svg | 5 +
public/flags/ru.svg | 5 +
public/flags/tr.svg | 6 +
src-tauri/Cargo.lock | 2 +-
src-tauri/Cargo.toml | 2 +-
src-tauri/tauri.conf.json | 2 +-
src/App.jsx | 230 ++++++++++++++++++++++++++++++++++++++
10 files changed, 259 insertions(+), 4 deletions(-)
create mode 100644 public/flags/it.svg
create mode 100644 public/flags/pl.svg
create mode 100644 public/flags/pt-br.svg
create mode 100644 public/flags/ru.svg
create mode 100644 public/flags/tr.svg
diff --git a/package.json b/package.json
index 3a1b867..b52f321 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "quasar-items-editor",
"private": true,
- "version": "0.5.0",
+ "version": "0.5.1",
"type": "module",
"scripts": {
"dev": "vite",
diff --git a/public/flags/it.svg b/public/flags/it.svg
new file mode 100644
index 0000000..48c7842
--- /dev/null
+++ b/public/flags/it.svg
@@ -0,0 +1,5 @@
+
\ No newline at end of file
diff --git a/public/flags/pl.svg b/public/flags/pl.svg
new file mode 100644
index 0000000..0f0a22c
--- /dev/null
+++ b/public/flags/pl.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/public/flags/pt-br.svg b/public/flags/pt-br.svg
new file mode 100644
index 0000000..47ce535
--- /dev/null
+++ b/public/flags/pt-br.svg
@@ -0,0 +1,5 @@
+
\ No newline at end of file
diff --git a/public/flags/ru.svg b/public/flags/ru.svg
new file mode 100644
index 0000000..2e75cd6
--- /dev/null
+++ b/public/flags/ru.svg
@@ -0,0 +1,5 @@
+
\ No newline at end of file
diff --git a/public/flags/tr.svg b/public/flags/tr.svg
new file mode 100644
index 0000000..66207f8
--- /dev/null
+++ b/public/flags/tr.svg
@@ -0,0 +1,6 @@
+
\ No newline at end of file
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock
index dab658b..8fc1ee0 100644
--- a/src-tauri/Cargo.lock
+++ b/src-tauri/Cargo.lock
@@ -2676,7 +2676,7 @@ dependencies = [
[[package]]
name = "quasar-items-editor"
-version = "0.5.0"
+version = "0.5.1"
dependencies = [
"serde",
"serde_json",
diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml
index 31642c1..5d5c8f7 100644
--- a/src-tauri/Cargo.toml
+++ b/src-tauri/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "quasar-items-editor"
-version = "0.5.0"
+version = "0.5.1"
description = "Item Editor für das Quasar Advanced Inventory"
authors = ["koichixD"]
edition = "2021"
diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json
index 22b7506..1911b4b 100644
--- a/src-tauri/tauri.conf.json
+++ b/src-tauri/tauri.conf.json
@@ -1,7 +1,7 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "quasar-items-editor",
- "version": "0.5.0",
+ "version": "0.5.1",
"identifier": "com.wf.quasar-items-editor",
"build": {
"beforeDevCommand": "npm run dev",
diff --git a/src/App.jsx b/src/App.jsx
index 9d0bb41..743799e 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -43,6 +43,11 @@ const languageOptions = [
{ value: "en", label: "English", flagSrc: "/flags/us.svg", flagAlt: "US" },
{ value: "es", label: "Espanol", flagSrc: "/flags/es.svg", flagAlt: "ES" },
{ value: "fr", label: "Francais", flagSrc: "/flags/fr.svg", flagAlt: "FR" },
+ { value: "pt-BR", label: "Portugues (BR)", flagSrc: "/flags/pt-br.svg", flagAlt: "BR" },
+ { value: "it", label: "Italiano", flagSrc: "/flags/it.svg", flagAlt: "IT" },
+ { value: "pl", label: "Polski", flagSrc: "/flags/pl.svg", flagAlt: "PL" },
+ { value: "tr", label: "Turkce", flagSrc: "/flags/tr.svg", flagAlt: "TR" },
+ { value: "ru", label: "Russkiy", flagSrc: "/flags/ru.svg", flagAlt: "RU" },
];
const translations = {
de: {
@@ -221,6 +226,231 @@ const translations = {
imageAddError: ({ message }) => `Impossible d'ajouter l'image : ${message}`,
imageAdded: "Image ajoutée",
},
+ "pt-BR": {
+ allItems: "Todos os itens",
+ uncategorized: "Nao atribuido",
+ categories: "Categorias",
+ category: "Categoria",
+ newCategoryPlaceholder: "Criar nova categoria...",
+ searchPlaceholder: "Buscar item...",
+ inventoryOpen: "Abrir inventario",
+ inventoryLabel: "Inventario",
+ loadedFile: "Carregado",
+ chooseItemHint: "Escolha uma categoria a esquerda e depois selecione um item.",
+ applyChanges: "Aplicar alteracoes",
+ selectInventoryTitle: "Selecionar pasta do QS inventory",
+ itemsFileMissing: "items.lua nao encontrado. Selecione a pasta qs-inventory.",
+ imagesMissing: "Pasta de imagens nao encontrada: qs-inventory\\html\\images",
+ noItemsDetected:
+ "Nenhum item detectado. Verifique se o arquivo comeca com `ItemList = {` ou `QBShared.Items = {`.",
+ loadedItems: ({ count }) => `Carregado: ${count} itens`,
+ loadError: ({ message }) => `Erro ao carregar: ${message}`,
+ saved: "Salvo",
+ saveError: ({ message }) => `Erro ao salvar: ${message}`,
+ backupError: ({ message }) => `Falha ao criar backup: ${message}`,
+ language: "Idioma",
+ newItem: "Novo item",
+ template: "Modelo",
+ create: "Criar",
+ cancel: "Cancelar",
+ itemId: "ID do item",
+ itemLabel: "Rotulo",
+ idRequired: "Informe um ID de item.",
+ idExists: ({ id }) => `ID de item ja existe: ${id}`,
+ templateNormal: "Itens normais",
+ templateNormalRare: "Itens normais com raridade",
+ templateWeapon: "Armas",
+ templateFood: "Comida",
+ templateDrink: "Bebida",
+ selectTemplateTitle: "Selecionar modelo",
+ createItemTitle: "Editar novo item",
+ close: "Fechar",
+ itemCreated: "Item salvo",
+ imageAdd: "Adicionar imagem",
+ imageAddError: ({ message }) => `Falha ao adicionar imagem: ${message}`,
+ imageAdded: "Imagem adicionada",
+ },
+ it: {
+ allItems: "Tutti gli item",
+ uncategorized: "Non assegnato",
+ categories: "Categorie",
+ category: "Categoria",
+ newCategoryPlaceholder: "Crea una nuova categoria...",
+ searchPlaceholder: "Cerca item...",
+ inventoryOpen: "Apri inventario",
+ inventoryLabel: "Inventario",
+ loadedFile: "Caricato",
+ chooseItemHint: "Scegli una categoria a sinistra e poi seleziona un item.",
+ applyChanges: "Applica modifiche",
+ selectInventoryTitle: "Seleziona cartella QS inventory",
+ itemsFileMissing: "items.lua non trovato. Seleziona la cartella qs-inventory.",
+ imagesMissing: "Cartella immagini non trovata: qs-inventory\\html\\images",
+ noItemsDetected:
+ "Nessun item rilevato. Assicurati che il file inizi con `ItemList = {` o `QBShared.Items = {`.",
+ loadedItems: ({ count }) => `Caricati: ${count} item`,
+ loadError: ({ message }) => `Errore di caricamento: ${message}`,
+ saved: "Salvato",
+ saveError: ({ message }) => `Errore di salvataggio: ${message}`,
+ backupError: ({ message }) => `Backup non riuscito: ${message}`,
+ language: "Lingua",
+ newItem: "Nuovo item",
+ template: "Modello",
+ create: "Crea",
+ cancel: "Annulla",
+ itemId: "ID item",
+ itemLabel: "Etichetta",
+ idRequired: "Inserisci un ID item.",
+ idExists: ({ id }) => `ID item gia esistente: ${id}`,
+ templateNormal: "Item normali",
+ templateNormalRare: "Item normali con rarita",
+ templateWeapon: "Armi",
+ templateFood: "Cibo",
+ templateDrink: "Bevanda",
+ selectTemplateTitle: "Seleziona modello",
+ createItemTitle: "Modifica nuovo item",
+ close: "Chiudi",
+ itemCreated: "Item salvato",
+ imageAdd: "Aggiungi immagine",
+ imageAddError: ({ message }) => `Impossibile aggiungere l'immagine: ${message}`,
+ imageAdded: "Immagine aggiunta",
+ },
+ pl: {
+ allItems: "Wszystkie przedmioty",
+ uncategorized: "Nieprzypisane",
+ categories: "Kategorie",
+ category: "Kategoria",
+ newCategoryPlaceholder: "Utworz nowa kategorie...",
+ searchPlaceholder: "Szukaj przedmiotu...",
+ inventoryOpen: "Otworz ekwipunek",
+ inventoryLabel: "Ekwipunek",
+ loadedFile: "Wczytano",
+ chooseItemHint: "Wybierz kategorie po lewej stronie, a nastepnie przedmiot.",
+ applyChanges: "Zastosuj zmiany",
+ selectInventoryTitle: "Wybierz folder QS inventory",
+ itemsFileMissing: "Nie znaleziono items.lua. Wybierz folder qs-inventory.",
+ imagesMissing: "Nie znaleziono folderu obrazow: qs-inventory\\html\\images",
+ noItemsDetected:
+ "Nie wykryto przedmiotow. Upewnij sie, ze plik zaczyna sie od `ItemList = {` lub `QBShared.Items = {`.",
+ loadedItems: ({ count }) => `Wczytano: ${count} przedmiotow`,
+ loadError: ({ message }) => `Blad wczytywania: ${message}`,
+ saved: "Zapisano",
+ saveError: ({ message }) => `Blad zapisu: ${message}`,
+ backupError: ({ message }) => `Nie udalo sie utworzyc kopii zapasowej: ${message}`,
+ language: "Jezyk",
+ newItem: "Nowy przedmiot",
+ template: "Szablon",
+ create: "Utworz",
+ cancel: "Anuluj",
+ itemId: "ID przedmiotu",
+ itemLabel: "Etykieta",
+ idRequired: "Podaj ID przedmiotu.",
+ idExists: ({ id }) => `ID przedmiotu juz istnieje: ${id}`,
+ templateNormal: "Zwykle przedmioty",
+ templateNormalRare: "Zwykle przedmioty z rzadkoscia",
+ templateWeapon: "Bron",
+ templateFood: "Jedzenie",
+ templateDrink: "Napoj",
+ selectTemplateTitle: "Wybierz szablon",
+ createItemTitle: "Edytuj nowy przedmiot",
+ close: "Zamknij",
+ itemCreated: "Przedmiot zapisany",
+ imageAdd: "Dodaj obraz",
+ imageAddError: ({ message }) => `Nie udalo sie dodac obrazu: ${message}`,
+ imageAdded: "Obraz dodany",
+ },
+ tr: {
+ allItems: "Tum ogeler",
+ uncategorized: "Atanmamis",
+ categories: "Kategoriler",
+ category: "Kategori",
+ newCategoryPlaceholder: "Yeni kategori olustur...",
+ searchPlaceholder: "Oge ara...",
+ inventoryOpen: "Envanteri ac",
+ inventoryLabel: "Envanter",
+ loadedFile: "Yuklendi",
+ chooseItemHint: "Soldan bir kategori secin ve sonra bir oge secin.",
+ applyChanges: "Degisiklikleri uygula",
+ selectInventoryTitle: "QS inventory klasorunu sec",
+ itemsFileMissing: "items.lua bulunamadi. Lutfen qs-inventory klasorunu secin.",
+ imagesMissing: "Gorsel klasoru bulunamadi: qs-inventory\\html\\images",
+ noItemsDetected:
+ "Oge bulunamadi. Dosyanin `ItemList = {` veya `QBShared.Items = {` ile basladigindan emin olun.",
+ loadedItems: ({ count }) => `Yuklendi: ${count} oge`,
+ loadError: ({ message }) => `Yukleme hatasi: ${message}`,
+ saved: "Kaydedildi",
+ saveError: ({ message }) => `Kaydetme hatasi: ${message}`,
+ backupError: ({ message }) => `Yedek olusturulamadi: ${message}`,
+ language: "Dil",
+ newItem: "Yeni oge",
+ template: "Sablon",
+ create: "Olustur",
+ cancel: "Iptal",
+ itemId: "Oge ID",
+ itemLabel: "Etiket",
+ idRequired: "Lutfen bir oge ID girin.",
+ idExists: ({ id }) => `Oge ID zaten mevcut: ${id}`,
+ templateNormal: "Normal ogeler",
+ templateNormalRare: "Nadirlikli normal ogeler",
+ templateWeapon: "Silahlar",
+ templateFood: "Yiyecek",
+ templateDrink: "Icecek",
+ selectTemplateTitle: "Sablon sec",
+ createItemTitle: "Yeni ogeyi duzenle",
+ close: "Kapat",
+ itemCreated: "Oge kaydedildi",
+ imageAdd: "Gorsel ekle",
+ imageAddError: ({ message }) => `Gorsel eklenemedi: ${message}`,
+ imageAdded: "Gorsel eklendi",
+ },
+ ru: {
+ allItems: "\u0412\u0441\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u044b",
+ uncategorized: "\u0411\u0435\u0437 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438",
+ categories: "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438",
+ category: "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f",
+ newCategoryPlaceholder: "\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e...",
+ searchPlaceholder: "\u041f\u043e\u0438\u0441\u043a \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430...",
+ inventoryOpen: "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0438\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044c",
+ inventoryLabel: "\u0418\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u044c",
+ loadedFile: "\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e",
+ chooseItemHint:
+ "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u0441\u043b\u0435\u0432\u0430, \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442.",
+ applyChanges: "\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f",
+ selectInventoryTitle: "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0430\u043f\u043a\u0443 QS inventory",
+ itemsFileMissing:
+ "\u0424\u0430\u0439\u043b items.lua \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0430\u043f\u043a\u0443 qs-inventory.",
+ imagesMissing:
+ "\u041f\u0430\u043f\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430: qs-inventory\\html\\images",
+ noItemsDetected:
+ "\u041f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0444\u0430\u0439\u043b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 `ItemList = {` \u0438\u043b\u0438 `QBShared.Items = {`.",
+ loadedItems: ({ count }) => `\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e: ${count} \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432`,
+ loadError: ({ message }) => `\u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438: ${message}`,
+ saved: "\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e",
+ saveError: ({ message }) => `\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f: ${message}`,
+ backupError: ({ message }) =>
+ `\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e: ${message}`,
+ language: "\u042f\u0437\u044b\u043a",
+ newItem: "\u041d\u043e\u0432\u044b\u0439 \u043f\u0440\u0435\u0434\u043c\u0435\u0442",
+ template: "\u0428\u0430\u0431\u043b\u043e\u043d",
+ create: "\u0421\u043e\u0437\u0434\u0430\u0442\u044c",
+ cancel: "\u041e\u0442\u043c\u0435\u043d\u0430",
+ itemId: "ID \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430",
+ itemLabel: "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",
+ idRequired: "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 ID \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430.",
+ idExists: ({ id }) => `ID \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442: ${id}`,
+ templateNormal: "\u041e\u0431\u044b\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u044b",
+ templateNormalRare: "\u041e\u0431\u044b\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u044b \u0441 \u0440\u0435\u0434\u043a\u043e\u0441\u0442\u044c\u044e",
+ templateWeapon: "\u041e\u0440\u0443\u0436\u0438\u0435",
+ templateFood: "\u0415\u0434\u0430",
+ templateDrink: "\u041d\u0430\u043f\u0438\u0442\u043e\u043a",
+ selectTemplateTitle: "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d",
+ createItemTitle: "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430",
+ close: "\u0417\u0430\u043a\u0440\u044b\u0442\u044c",
+ itemCreated: "\u041f\u0440\u0435\u0434\u043c\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d",
+ imageAdd: "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",
+ imageAddError: ({ message }) =>
+ `\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435: ${message}`,
+ imageAdded: "\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e",
+ },
};
const itemTemplates = [