This commit is contained in:
2026-06-12 14:56:10 +03:00
parent 59d33f8061
commit 2490c02e11
340 changed files with 2286 additions and 4961 deletions
@@ -0,0 +1,263 @@
package localization
import javafx.beans.property.ObjectProperty
import javafx.beans.property.SimpleObjectProperty
import javafx.scene.control.Labeled
import java.util.Locale
object AppLocale {
val currentLocale: ObjectProperty<Locale> = SimpleObjectProperty(Locale("ru"))
private val strings: Map<Locale, Map<String, String>> = mapOf(
Locale("ru") to mapOf(
"auth.title" to "Вход / Регистрация",
"auth.login" to "Вход",
"auth.register" to "Регистрация",
"auth.username" to "Имя пользователя",
"auth.password" to "Пароль",
"auth.host" to "Сервер",
"auth.port" to "Порт",
"auth.error.invalid.port" to "Некорректный порт (1–65535)",
"auth.submit.login" to "Войти",
"auth.submit.register" to "Зарегистрироваться",
"auth.error.empty" to "Заполните все поля",
"auth.error.failed" to "Ошибка входа. Проверьте логин и пароль.",
"auth.error.register.failed" to "Ошибка регистрации. Возможно, пользователь уже существует.",
"auth.error.server" to "Сервер недоступен",
"auth.success.login" to "Успешный вход",
"auth.success.register" to "Успешная регистрация",
"main.title" to "Коллекция HumanBeing",
"main.user" to "Пользователь",
"main.logout" to "Выйти",
"main.locale" to "Язык",
"main.filter" to "Фильтр",
"visualization.title" to "Визуализация",
"table.name" to "Имя",
"table.coordinates.x" to "X",
"table.coordinates.y" to "Y",
"table.creationDate" to "Дата создания",
"table.realHero" to "Герой",
"table.hasToothpick" to "Зубочистка",
"table.impactSpeed" to "Скорость",
"table.soundtrackName" to "Саундтрек",
"table.minutesOfWaiting" to "Минуты ожидания",
"table.weaponType" to "Оружие",
"table.car.cool" to "Крутая тачка",
"table.owner" to "Владелец",
"button.add" to "Добавить",
"button.edit" to "Редактировать",
"button.delete" to "Удалить",
"button.refresh" to "Обновить",
"dialog.title.add" to "Добавление объекта",
"dialog.title.edit" to "Редактирование объекта",
"dialog.ok" to "OK",
"dialog.cancel" to "Отмена",
"dialog.error.validation" to "Ошибка валидации",
"dialog.error.name" to "Имя не может быть пустым",
"dialog.error.number" to "Некорректное число",
"dialog.error.no.user" to "Ошибка: пользователь не идентифицирован",
"info.title" to "Информация об объекте",
"info.owner" to "Владелец",
"info.id" to "ID",
"delete.confirm" to "Удалить этот объект?",
"delete.confirm.title" to "Подтверждение удаления",
"error.no.selection" to "Объект не выбран",
"error.not.owner" to "Вы не владелец этого объекта",
),
Locale("nl") to mapOf(
"auth.title" to "Inloggen / Registreren",
"auth.login" to "Inloggen",
"auth.register" to "Registreren",
"auth.username" to "Gebruikersnaam",
"auth.password" to "Wachtwoord",
"auth.host" to "Server",
"auth.port" to "Poort",
"auth.error.invalid.port" to "Ongeldige poort (1–65535)",
"auth.submit.login" to "Inloggen",
"auth.submit.register" to "Registreren",
"auth.error.empty" to "Vul alle velden in",
"auth.error.failed" to "Inloggen mislukt. Controleer uw gegevens.",
"auth.error.register.failed" to "Registratie mislukt. Gebruiker bestaat mogelijk al.",
"auth.error.server" to "Server niet bereikbaar",
"auth.success.login" to "Succesvol ingelogd",
"auth.success.register" to "Succesvol geregistreerd",
"main.title" to "HumanBeing Collectie",
"main.user" to "Gebruiker",
"main.logout" to "Uitloggen",
"main.locale" to "Taal",
"main.filter" to "Filter",
"visualization.title" to "Visualisatie",
"table.name" to "Naam",
"table.coordinates.x" to "X",
"table.coordinates.y" to "Y",
"table.creationDate" to "Aanmaakdatum",
"table.realHero" to "Held",
"table.hasToothpick" to "Tandenstoker",
"table.impactSpeed" to "Snelheid",
"table.soundtrackName" to "Soundtrack",
"table.minutesOfWaiting" to "Wachtminuten",
"table.weaponType" to "Wapen",
"table.car.cool" to "Coole auto",
"table.owner" to "Eigenaar",
"button.add" to "Toevoegen",
"button.edit" to "Bewerken",
"button.delete" to "Verwijderen",
"button.refresh" to "Vernieuwen",
"dialog.title.add" to "Object toevoegen",
"dialog.title.edit" to "Object bewerken",
"dialog.ok" to "OK",
"dialog.cancel" to "Annuleren",
"dialog.error.validation" to "Validatiefout",
"dialog.error.name" to "Naam mag niet leeg zijn",
"dialog.error.number" to "Ongeldig nummer",
"dialog.error.no.user" to "Fout: gebruiker niet geïdentificeerd",
"info.title" to "Objectinformatie",
"info.owner" to "Eigenaar",
"info.id" to "ID",
"delete.confirm" to "Dit object verwijderen?",
"delete.confirm.title" to "Verwijderen bevestigen",
"error.no.selection" to "Geen object geselecteerd",
"error.not.owner" to "U bent niet de eigenaar van dit object",
),
Locale("hu") to mapOf(
"auth.title" to "Bejelentkezés / Regisztráció",
"auth.login" to "Bejelentkezés",
"auth.register" to "Regisztráció",
"auth.username" to "Felhasználónév",
"auth.password" to "Jelszó",
"auth.host" to "Szerver",
"auth.port" to "Port",
"auth.error.invalid.port" to "Érvénytelen port (1–65535)",
"auth.submit.login" to "Belépés",
"auth.submit.register" to "Regisztrálás",
"auth.error.empty" to "Töltse ki az összes mezőt",
"auth.error.failed" to "Sikertelen bejelentkezés. Ellenőrizze adatait.",
"auth.error.register.failed" to "Sikertelen regisztráció. Lehet, hogy a felhasználó már létezik.",
"auth.error.server" to "Szerver nem elérhető",
"auth.success.login" to "Sikeres bejelentkezés",
"auth.success.register" to "Sikeres regisztráció",
"main.title" to "HumanBeing Gyűjtemény",
"main.user" to "Felhasználó",
"main.logout" to "Kijelentkezés",
"main.locale" to "Nyelv",
"main.filter" to "Szűrő",
"visualization.title" to "Vizualizáció",
"table.name" to "Név",
"table.coordinates.x" to "X",
"table.coordinates.y" to "Y",
"table.creationDate" to "Létrehozás dátuma",
"table.realHero" to "Hős",
"table.hasToothpick" to "Fogpiszkáló",
"table.impactSpeed" to "Sebesség",
"table.soundtrackName" to "Soundtrack",
"table.minutesOfWaiting" to "Várakozási percek",
"table.weaponType" to "Fegyver",
"table.car.cool" to "Menő autó",
"table.owner" to "Tulajdonos",
"button.add" to "Hozzáadás",
"button.edit" to "Szerkesztés",
"button.delete" to "Törlés",
"button.refresh" to "Frissítés",
"dialog.title.add" to "Objektum hozzáadása",
"dialog.title.edit" to "Objektum szerkesztése",
"dialog.ok" to "OK",
"dialog.cancel" to "Mégse",
"dialog.error.validation" to "Érvényesítési hiba",
"dialog.error.name" to "A név nem lehet üres",
"dialog.error.number" to "Érvénytelen szám",
"dialog.error.no.user" to "Hiba: a felhasználó nincs azonosítva",
"info.title" to "Objektum információ",
"info.owner" to "Tulajdonos",
"info.id" to "ID",
"delete.confirm" to "Törli ezt az objektumot?",
"delete.confirm.title" to "Törlés megerősítése",
"error.no.selection" to "Nincs objektum kiválasztva",
"error.not.owner" to "Ön nem a tulajdonosa ennek az objektumnak",
),
Locale("en", "AU") to mapOf(
"auth.title" to "Sign In / Sign Up",
"auth.login" to "Sign In",
"auth.register" to "Sign Up",
"auth.username" to "Username",
"auth.password" to "Password",
"auth.host" to "Server",
"auth.port" to "Port",
"auth.error.invalid.port" to "Invalid port (1–65535)",
"auth.submit.login" to "Sign In",
"auth.submit.register" to "Sign Up",
"auth.error.empty" to "Fill in all fields, mate",
"auth.error.failed" to "Login failed. Check ya credentials.",
"auth.error.register.failed" to "Registration failed. Reckon that user already exists.",
"auth.error.server" to "Server's cactus",
"auth.success.login" to "G'day! Logged in successfully",
"auth.success.register" to "Registered, bonza!",
"main.title" to "HumanBeing Collection",
"main.user" to "User",
"main.logout" to "Logout",
"main.locale" to "Language",
"main.filter" to "Filter",
"visualization.title" to "Visualisation",
"table.name" to "Name",
"table.coordinates.x" to "X",
"table.coordinates.y" to "Y",
"table.creationDate" to "Creation Date",
"table.realHero" to "Hero",
"table.hasToothpick" to "Toothpick",
"table.impactSpeed" to "Impact Speed",
"table.soundtrackName" to "Soundtrack",
"table.minutesOfWaiting" to "Minutes of Waitin'",
"table.weaponType" to "Weapon",
"table.car.cool" to "Carn't",
"table.owner" to "Owner",
"button.add" to "Add",
"button.edit" to "Edit",
"button.delete" to "Delete",
"button.refresh" to "Refresh",
"dialog.title.add" to "Add Object",
"dialog.title.edit" to "Edit Object",
"dialog.ok" to "OK",
"dialog.cancel" to "Cancel",
"dialog.error.validation" to "Validation Error",
"dialog.error.name" to "Name can't be empty",
"dialog.error.number" to "Invalid number, mate",
"dialog.error.no.user" to "Error: user not identified, mate",
"info.title" to "Object Info",
"info.owner" to "Owner",
"info.id" to "ID",
"delete.confirm" to "Reckon you wanna delete this?",
"delete.confirm.title" to "Confirm Deletion",
"error.no.selection" to "No object selected",
"error.not.owner" to "You're not the owner of this object",
),
)
fun get(key: String): String {
return strings[currentLocale.value]?.get(key) ?: key
}
fun bind(property: javafx.beans.property.Property<String>, key: String) {
property.value = get(key)
currentLocale.addListener { _, _, _ ->
property.value = get(key)
}
}
fun bindLabel(labeled: Labeled, key: String) {
bind(labeled.textProperty(), key)
}
fun bindPrompt(textField: javafx.scene.control.TextInputControl, key: String) {
bind(textField.promptTextProperty(), key)
}
fun availableLocales(): List<Locale> = strings.keys.toList()
fun localeDisplayName(locale: Locale): String = when (locale) {
Locale("ru") -> "Русский"
Locale("nl") -> "Nederlands"
Locale("hu") -> "Magyar"
Locale("en", "AU") -> "English (Australia)"
else -> locale.displayName
}
}