From 9d58026568683d62475cb3b8562adf8bb8197581 Mon Sep 17 00:00:00 2001 From: iMoHax Date: Wed, 27 Aug 2014 14:43:27 +0400 Subject: [PATCH] - add localization support - add english language --- client/src/main/java/ru/trader/Main.java | 49 ++++++---- .../ru/trader/controllers/MainController.java | 43 ++++++++- .../trader/controllers/OrdersController.java | 3 +- .../trader/controllers/PathsController.java | 3 +- ...sController.java => RouterController.java} | 2 +- .../java/ru/trader/controllers/Screeners.java | 3 +- .../controllers/TopOrdersController.java | 3 +- .../controllers/VendorEditorController.java | 6 +- .../ru/trader/view/support/Localization.java | 76 +++++++++++++++ .../resources/lang/locale_en_US.properties | 94 +++++++++++++++++++ .../resources/lang/locale_ru_RU.properties | 94 +++++++++++++++++++ .../src/main/resources/lang/ru_Ru.properties | 19 ++++ client/src/main/resources/view/itemDesc.fxml | 4 +- client/src/main/resources/view/items.fxml | 26 ++--- client/src/main/resources/view/main.fxml | 23 ++--- client/src/main/resources/view/oEditor.fxml | 4 +- client/src/main/resources/view/offers.fxml | 82 +++++++++------- client/src/main/resources/view/orders.fxml | 22 ++--- client/src/main/resources/view/paths.fxml | 14 +-- .../view/{routers.fxml => router.fxml} | 54 +++++------ client/src/main/resources/view/topOrders.fxml | 14 +-- client/src/main/resources/view/vEditor.fxml | 6 +- 22 files changed, 502 insertions(+), 142 deletions(-) rename client/src/main/java/ru/trader/controllers/{RoutersController.java => RouterController.java} (99%) create mode 100644 client/src/main/java/ru/trader/view/support/Localization.java create mode 100644 client/src/main/resources/lang/locale_en_US.properties create mode 100644 client/src/main/resources/lang/locale_ru_RU.properties create mode 100644 client/src/main/resources/lang/ru_Ru.properties rename client/src/main/resources/view/{routers.fxml => router.fxml} (67%) diff --git a/client/src/main/java/ru/trader/Main.java b/client/src/main/java/ru/trader/Main.java index 8fc85ae..7d2db58 100644 --- a/client/src/main/java/ru/trader/Main.java +++ b/client/src/main/java/ru/trader/Main.java @@ -9,6 +9,7 @@ import org.controlsfx.dialog.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.trader.controllers.Screeners; +import ru.trader.view.support.Localization; import javax.xml.stream.XMLStreamException; import java.io.File; @@ -17,28 +18,16 @@ import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; +import java.util.Locale; public class Main extends Application { private final static Logger LOG = LoggerFactory.getLogger(Main.class); + private static Stage primaryStage; @Override public void start(Stage primaryStage) throws Exception { - primaryStage.setTitle("Trader"); - primaryStage.setMinHeight(590); - primaryStage.setScene(new Scene(Screeners.newScreeners(Main.class.getResource("/view/main.fxml"),getUrl("style.css").toExternalForm()))); - primaryStage.setOnCloseRequest((we)->{ - try { - if (World.getMarket().isChange()){ - Action res = Screeners.showConfirm("Изменения не были сохранены, сохранить?"); - if (res == Dialog.Actions.YES) World.save(); - else if (res == Dialog.Actions.CANCEL) we.consume(); - } - Screeners.closeAll(); - } catch (FileNotFoundException | UnsupportedEncodingException | XMLStreamException e) { - LOG.error("Ошибка при сохранении",e); - Screeners.showException(e); - } - }); + Main.primaryStage = primaryStage; + loadMainScene(); loadResources(); primaryStage.show(); } @@ -61,6 +50,34 @@ public class Main extends Application { } + public static void changeLocale(Locale locale) throws IOException { + Localization.setLocale(locale); + primaryStage.hide(); + loadMainScene(); + loadResources(); + primaryStage.show(); + } + + private static void loadMainScene() throws IOException { + primaryStage.setTitle(Localization.getString("main.title")); + primaryStage.setMinHeight(590); + primaryStage.setScene(new Scene(Screeners.newScreeners(Main.class.getResource("/view/main.fxml"),getUrl("style.css").toExternalForm()))); + primaryStage.setOnCloseRequest((we)->{ + try { + if (World.getMarket().isChange()){ + Action res = Screeners.showConfirm(Localization.getString("dialogs.save")); + if (res == Dialog.Actions.YES) World.save(); + else if (res == Dialog.Actions.CANCEL) we.consume(); + } + Screeners.closeAll(); + } catch (FileNotFoundException | UnsupportedEncodingException | XMLStreamException e) { + LOG.error("Ошибка при сохранении",e); + Screeners.showException(e); + } + }); + + } + private static void loadResources() throws IOException { Screeners.loadItemDescStage(getUrl(("itemDesc.fxml"))); Screeners.loadVEditorStage(getUrl(("vEditor.fxml"))); diff --git a/client/src/main/java/ru/trader/controllers/MainController.java b/client/src/main/java/ru/trader/controllers/MainController.java index 19684c8..61bff45 100644 --- a/client/src/main/java/ru/trader/controllers/MainController.java +++ b/client/src/main/java/ru/trader/controllers/MainController.java @@ -3,22 +3,29 @@ package ru.trader.controllers; import javafx.event.ActionEvent; import javafx.fxml.FXML; +import javafx.scene.control.Menu; +import javafx.scene.control.RadioMenuItem; +import javafx.scene.control.ToggleGroup; import javafx.scene.layout.BorderPane; import javafx.stage.FileChooser; import org.controlsfx.dialog.Dialogs; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; +import ru.trader.Main; import ru.trader.World; import ru.trader.model.ItemModel; import ru.trader.model.MarketModel; +import ru.trader.view.support.Localization; import javax.xml.stream.XMLStreamException; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.UnsupportedEncodingException; +import java.util.Locale; import java.util.Optional; +import java.util.ResourceBundle; public class MainController { private final static Logger LOG = LoggerFactory.getLogger(MainController.class); @@ -30,11 +37,43 @@ public class MainController { @FXML private BorderPane mainPane; + @FXML + private Menu langs; + @FXML private OffersController offersController; @FXML private ItemsController itemsController; + + + @FXML + private void initialize() { + fillLangs(); + } + + private void fillLangs() { + ToggleGroup toggleGroup = new ToggleGroup(); + for (Locale locale : Localization.getLocales()) { + ResourceBundle rb = Localization.getResources(locale); + RadioMenuItem mi = new RadioMenuItem(rb.getString("main.menu.file.language.item")); + mi.setToggleGroup(toggleGroup); + mi.setUserData(locale); + if (locale.equals(Localization.getCurrentLocale())) mi.setSelected(true); + langs.getItems().add(mi); + } + toggleGroup.selectedToggleProperty().addListener((cb, o, n) -> { + try { + if (n!=null) + Main.changeLocale((Locale) n.getUserData()); + } catch (IOException e) { + LOG.error("Error on change locale to {}", n.getUserData()); + LOG.error("",e); + } + }); + } + + public OffersController getOffersController() { return offersController; } @@ -83,8 +122,8 @@ public class MainController { public Optional addItem(){ Optional res = Dialogs.create() - .title("Добавление нового товара") - .message("Введите название товара") + .title(Localization.getString("dialogs.addItem.title")) + .message(Localization.getString("dialogs.addItem.message")) .showTextInput(); ItemModel item = null; if (res.isPresent()){ diff --git a/client/src/main/java/ru/trader/controllers/OrdersController.java b/client/src/main/java/ru/trader/controllers/OrdersController.java index d54cd3e..e463637 100644 --- a/client/src/main/java/ru/trader/controllers/OrdersController.java +++ b/client/src/main/java/ru/trader/controllers/OrdersController.java @@ -17,6 +17,7 @@ import ru.trader.model.OfferDescModel; import ru.trader.model.OfferModel; import ru.trader.model.OrderModel; import ru.trader.model.support.BindingsHelper; +import ru.trader.view.support.Localization; import java.util.Collection; @@ -75,7 +76,7 @@ public class OrdersController { init(offers, balance, max); - Dialog dlg = new Dialog(parent, "Создание заказов"); + Dialog dlg = new Dialog(parent, Localization.getString("orders.title")); dlg.setContent(content); dlg.getActions().addAll(OK, Dialog.Actions.CANCEL); dlg.setResizable(false); diff --git a/client/src/main/java/ru/trader/controllers/PathsController.java b/client/src/main/java/ru/trader/controllers/PathsController.java index 40974ac..b7288e4 100644 --- a/client/src/main/java/ru/trader/controllers/PathsController.java +++ b/client/src/main/java/ru/trader/controllers/PathsController.java @@ -10,6 +10,7 @@ import org.controlsfx.control.action.AbstractAction; import org.controlsfx.control.action.Action; import org.controlsfx.dialog.Dialog; import ru.trader.model.PathRouteModel; +import ru.trader.view.support.Localization; import java.util.Collection; @@ -41,7 +42,7 @@ public class PathsController { init(paths); - Dialog dlg = new Dialog(parent, String.format("Доступные маршруты")); + Dialog dlg = new Dialog(parent, Localization.getString("paths.title")); dlg.setContent(content); dlg.getActions().addAll(OK, Dialog.Actions.CANCEL); dlg.setResizable(false); diff --git a/client/src/main/java/ru/trader/controllers/RoutersController.java b/client/src/main/java/ru/trader/controllers/RouterController.java similarity index 99% rename from client/src/main/java/ru/trader/controllers/RoutersController.java rename to client/src/main/java/ru/trader/controllers/RouterController.java index 17ea065..892a604 100644 --- a/client/src/main/java/ru/trader/controllers/RoutersController.java +++ b/client/src/main/java/ru/trader/controllers/RouterController.java @@ -14,7 +14,7 @@ import ru.trader.view.support.NumberField; import ru.trader.view.support.RouteNode; -public class RoutersController { +public class RouterController { @FXML private NumberField balance; diff --git a/client/src/main/java/ru/trader/controllers/Screeners.java b/client/src/main/java/ru/trader/controllers/Screeners.java index 5bf1f47..72614d4 100644 --- a/client/src/main/java/ru/trader/controllers/Screeners.java +++ b/client/src/main/java/ru/trader/controllers/Screeners.java @@ -10,6 +10,7 @@ import org.controlsfx.control.action.Action; import org.controlsfx.dialog.Dialogs; import ru.trader.model.*; import ru.trader.view.support.CustomBuilderFactory; +import ru.trader.view.support.Localization; import java.io.IOException; import java.net.URL; @@ -35,7 +36,7 @@ public class Screeners { private static PathsController pathsController; private static FXMLLoader initLoader(URL url){ - FXMLLoader loader = new FXMLLoader(url); + FXMLLoader loader = new FXMLLoader(url, Localization.getResources()); loader.setBuilderFactory(new CustomBuilderFactory()); return loader; } diff --git a/client/src/main/java/ru/trader/controllers/TopOrdersController.java b/client/src/main/java/ru/trader/controllers/TopOrdersController.java index a2e06e9..8340749 100644 --- a/client/src/main/java/ru/trader/controllers/TopOrdersController.java +++ b/client/src/main/java/ru/trader/controllers/TopOrdersController.java @@ -13,6 +13,7 @@ import org.controlsfx.control.action.AbstractAction; import org.controlsfx.control.action.Action; import org.controlsfx.dialog.Dialog; import ru.trader.model.OrderModel; +import ru.trader.view.support.Localization; import java.util.Collection; @@ -49,7 +50,7 @@ public class TopOrdersController { init(orders); - Dialog dlg = new Dialog(parent, "TOP заказов"); + Dialog dlg = new Dialog(parent, Localization.getString("topOrders.title")); dlg.setContent(content); dlg.getActions().addAll(OK, Dialog.Actions.CANCEL); dlg.setResizable(false); diff --git a/client/src/main/java/ru/trader/controllers/VendorEditorController.java b/client/src/main/java/ru/trader/controllers/VendorEditorController.java index c87fd78..1a69727 100644 --- a/client/src/main/java/ru/trader/controllers/VendorEditorController.java +++ b/client/src/main/java/ru/trader/controllers/VendorEditorController.java @@ -9,7 +9,6 @@ import javafx.scene.Parent; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.TextField; -import javafx.util.converter.DoubleStringConverter; import org.controlsfx.control.ButtonBar; import org.controlsfx.control.action.AbstractAction; import org.controlsfx.control.action.Action; @@ -19,6 +18,7 @@ import org.slf4j.LoggerFactory; import ru.trader.core.OFFER_TYPE; import ru.trader.model.*; import ru.trader.model.support.BindingsHelper; +import ru.trader.view.support.Localization; import ru.trader.view.support.NumberField; import ru.trader.view.support.PriceStringConverter; import ru.trader.view.support.ViewUtils; @@ -32,7 +32,7 @@ public class VendorEditorController { private VendorModel vendor; - private final Action actSave = new AbstractAction("Сохранить") { + private final Action actSave = new AbstractAction(Localization.getString("vEditor.save")) { { ButtonBar.setType(this, ButtonBar.ButtonType.OK_DONE); } @@ -85,7 +85,7 @@ public class VendorEditorController { if (vendor != null) { fill(); } - Dialog dlg = new Dialog(parent, vendor == null ? "Добавление станции" : "Редактирование станции"); + Dialog dlg = new Dialog(parent, Localization.getString(vendor == null ? "vEditor.title.add" : "vEditor.title.edit")); dlg.setContent(content); dlg.getActions().addAll(actSave, Dialog.Actions.CANCEL); dlg.setResizable(false); diff --git a/client/src/main/java/ru/trader/view/support/Localization.java b/client/src/main/java/ru/trader/view/support/Localization.java new file mode 100644 index 0000000..a4f650a --- /dev/null +++ b/client/src/main/java/ru/trader/view/support/Localization.java @@ -0,0 +1,76 @@ +package ru.trader.view.support; + +import ru.trader.Main; + +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.Arrays; +import java.util.Collection; +import java.util.Locale; +import java.util.ResourceBundle; + +public class Localization { + private static final Locale DEFAULT = new Locale("ru", "RU"); + private static final ClassLoader loader = getLoader(); + private static final Locale[] supportedLocales = { + DEFAULT, + new Locale("en", "US") + }; + + private static ResourceBundle rb = ResourceBundle.getBundle("locale", DEFAULT, loader); + private static Locale locale = DEFAULT; + + + static { + setLocale(Locale.getDefault()); + } + + private static Locale getSupported(Locale locale){ + for (Locale l : supportedLocales) { + if (l.getLanguage().equals(locale.getLanguage())) + return l; + } + return DEFAULT; + } + + private static ClassLoader getLoader() { + try { + URL url = Main.class.getResource("/lang/"); + File file = new File("lang"); + if (file.exists() && file.isDirectory()) + url = file.toURI().toURL(); + return new URLClassLoader(new URL[]{url}); + } catch (MalformedURLException e) { + return ClassLoader.getSystemClassLoader(); + } + } + + public static void setLocale(Locale locale){ + Locale.setDefault(locale); + Localization.locale = locale; + rb = getResources(locale); + } + + public static ResourceBundle getResources(Locale locale){ + return ResourceBundle.getBundle("locale", getSupported(locale), loader); + } + + public static ResourceBundle getResources(){ + return rb; + } + + public static Collection getLocales(){ + return Arrays.asList(supportedLocales); + } + + public static String getString(String key){ + return rb.getString(key); + } + + public static Locale getCurrentLocale() { + return locale; + } +} + diff --git a/client/src/main/resources/lang/locale_en_US.properties b/client/src/main/resources/lang/locale_en_US.properties new file mode 100644 index 0000000..a11026d --- /dev/null +++ b/client/src/main/resources/lang/locale_en_US.properties @@ -0,0 +1,94 @@ +# Market +market.vendors=Stations +market.items=Commods +market.offers=Offers +market.item.name=Commodity +market.vendor.name=Station + +# Offer +market.offer.buy=Buy +market.offer.sell=Sell +market.offer.price=Price +market.offer.min=Min +market.offer.avg=Avg +market.offer.max=Max +market.offer.max.full=Maximum +market.offer.best=Best + +# Order +market.order.count=Count +market.order.profit=Profit +market.order.buyer=Buyer +market.order.seller=Seller +market.order.distance=Distance + +# Route +routes=Routes +routes.path=Path +routes.jumps=Jumps +routes.refills=Refills +routes.lands=Landings + +# main.fxml +main.title=Trader +main.menu.file=File +main.menu.file.save=Save +main.menu.file.import=Import... +main.menu.file.language=Language +main.menu.file.language.item=English +main.menu.edit=Edit +main.menu.edit.addStation=Add Station +main.menu.edit.addItem=Add Commodity +main.menu.edit.editStation=Edit Station + +# save confirm dialog +dialogs.save=Changes were not saved, save changes? + +# add item dialog +dialogs.addItem.title=Adding new commodity +dialogs.addItem.message=Enter commodity name + +# items.fxml + +# itemDesc.fxml +itemDesc.sellers=Sellers: +itemDesc.buyers=Buyers: + +# oEditor.fxml +oEditor.sell=Sell: +oEditor.buy=Buy: + +# offers.fxml +offers.pane.sell=Selling commodities +offers.pane.buy=Buying commodities + +# orders.fxml +orders.title=Create orders + +# topOrders.fxml +topOrders.title=TOP orders + +# vEditor.fxml +vEditor.save=Save +vEditor.title.add=Add Station +vEditor.title.edit=Edit Station + +# paths.fxml +paths.title=Available routes + +# router.fxml +router.pane.ship=Ship parameters +router.pane.ship.balance=Balance: +router.pane.ship.cargo=Cargo: +router.pane.ship.fueltank=Fuel(LY): +router.pane.ship.distance=Distance(LY): +router.pane.route=Route parameters +router.pane.route.from=From: +router.pane.route.to=To: +router.pane.route.jumps=Jumps: +route.button.edit=Edit +route.button.remove=Remove +route.button.clear=Clear +route.button.top=TOP 100 +router.pane.total=Total +router.pane.total.profit=Profit: diff --git a/client/src/main/resources/lang/locale_ru_RU.properties b/client/src/main/resources/lang/locale_ru_RU.properties new file mode 100644 index 0000000..1055176 --- /dev/null +++ b/client/src/main/resources/lang/locale_ru_RU.properties @@ -0,0 +1,94 @@ +# Market +market.vendors=\u0421\u0442\u0430\u043D\u0446\u0438\u0438 +market.items=\u0422\u043E\u0432\u0430\u0440\u044B +market.offers=\u0417\u0430\u043A\u0430\u0437\u044B +market.item.name=\u0422\u043E\u0432\u0430\u0440 +market.vendor.name=\u0421\u0442\u0430\u043D\u0446\u0438\u044F + +# Offer +market.offer.buy=\u041F\u043E\u043A\u0443\u043F\u043A\u0430 +market.offer.sell=\u041F\u0440\u043E\u0434\u0430\u0436\u0430 +market.offer.price=\u0426\u0435\u043D\u0430 +market.offer.min=\u041C\u0438\u043D. +market.offer.avg=\u0421\u0440. +market.offer.max=\u041C\u0430\u043A\u0441. +market.offer.max.full=\u041C\u0430\u043A\u0441\u0438\u043C\u0443\u043C +market.offer.best=\u041B\u0443\u0447\u0448\u0430\u044F + +# Order +market.order.count=\u041A\u043E\u043B-\u0432\u043E +market.order.profit=\u041F\u0440\u0438\u0431\u044B\u043B\u044C +market.order.buyer=\u041F\u043E\u043A\u0443\u043F\u0430\u0442\u0435\u043B\u044C +market.order.seller=\u041F\u0440\u043E\u0434\u0430\u0432\u0435\u0446 +market.order.distance=\u0414\u0438\u0441\u0442\u0430\u043D\u0446\u0438\u044F + +# Route +routes=\u041C\u0430\u0440\u0448\u0440\u0443\u0442\u044B +routes.path=\u041F\u0443\u0442\u044C +routes.jumps=\u041F\u0440\u044B\u0436\u043A\u043E\u0432 +routes.refills=\u0417\u0430\u043F\u0440\u0430\u0432\u043E\u043A +routes.lands=\u041F\u043E\u0441\u0430\u0434\u043E\u043A + +# main.fxml +main.title=\u0422\u043E\u0440\u0433\u043E\u0439\u0434 +main.menu.file=\u0424\u0430\u0439\u043B +main.menu.file.save=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C +main.menu.file.import=\u0418\u043C\u043F\u043E\u0440\u0442... +main.menu.file.language=\u042F\u0437\u044B\u043A +main.menu.file.language.item=\u0420\u0443\u0441\u0441\u043A\u0438\u0439 +main.menu.edit=\u041F\u0440\u0430\u0432\u043A\u0430 +main.menu.edit.addStation=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u0442\u0430\u043D\u0446\u0438\u044E +main.menu.edit.addItem=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0442\u043E\u0432\u0430\u0440 +main.menu.edit.editStation=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0442\u0430\u043D\u0446\u0438\u044E + +# save confirm dialog +dialogs.save=\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u043D\u0435 \u0431\u044B\u043B\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B, \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C? + +# add item dialog +dialogs.addItem.title=\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043D\u043E\u0432\u043E\u0433\u043E \u0442\u043E\u0432\u0430\u0440\u0430 +dialogs.addItem.message=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0442\u043E\u0432\u0430\u0440\u0430 + +# items.fxml + +# itemDesc.fxml +itemDesc.sellers=\u041F\u0440\u043E\u0434\u0430\u0432\u0446\u044B: +itemDesc.buyers=\u041F\u043E\u043A\u0443\u043F\u0430\u0442\u0435\u043B\u0438: + +# oEditor.fxml +oEditor.sell=\u041F\u0440\u043E\u0434\u0430\u0436\u0430: +oEditor.buy=\u041F\u043E\u043A\u0443\u043F\u043A\u0430: + +# offers.fxml +offers.pane.sell=\u041F\u0440\u043E\u0434\u0430\u0432\u0430\u0435\u043C\u044B\u0435 \u0442\u043E\u0432\u0430\u0440\u044B +offers.pane.buy=\u041F\u043E\u043A\u0443\u043F\u0430\u0435\u043C\u044B\u0435 \u0442\u043E\u0432\u0430\u0440\u044B + +# orders.fxml +orders.title=\u0421\u043E\u0437\u0434\u0430\u043D\u0438\u0435 \u0437\u0430\u043A\u0430\u0437\u043E\u0432 + +# topOrders.fxml +topOrders.title=TOP \u0437\u0430\u043A\u0430\u0437\u043E\u0432 + +# vEditor.fxml +vEditor.save=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C +vEditor.title.add=\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u043D\u0446\u0438\u0438 +vEditor.title.edit=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0441\u0442\u0430\u043D\u0446\u0438\u0438 + +# paths.fxml +paths.title=\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0435 \u043C\u0430\u0440\u0448\u0440\u0443\u0442\u044B + +# router.fxml +router.pane.ship=\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u043A\u043E\u0440\u0430\u0431\u043B\u044F +router.pane.ship.balance=\u0411\u0430\u043B\u0430\u043D\u0441: +router.pane.ship.cargo=\u0422\u0440\u044E\u043C: +router.pane.ship.fueltank=\u0417\u0430\u043F\u0430\u0441 \u0442\u043E\u043F\u043B\u0438\u0432\u0430(LY): +router.pane.ship.distance=\u0414\u0438\u0441\u0442\u0430\u043D\u0446\u0438\u044F \u043F\u0440\u044B\u0436\u043A\u0430(LY): +router.pane.route=\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u043C\u0430\u0440\u0448\u0440\u0443\u0442\u0430 +router.pane.route.from=\u041E\u0442: +router.pane.route.to=\u0414\u043E: +router.pane.route.jumps=\u041F\u0440\u044B\u0436\u043A\u043E\u0432: +route.button.edit=\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C +route.button.remove=\u0423\u0434\u0430\u043B\u0438\u0442\u044C +route.button.clear=\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u044C +route.button.top=TOP 100 +router.pane.total=\u0418\u0442\u043E\u0433\u043E +router.pane.total.profit=\u041F\u0440\u0438\u0431\u044B\u043B\u044C: diff --git a/client/src/main/resources/lang/ru_Ru.properties b/client/src/main/resources/lang/ru_Ru.properties new file mode 100644 index 0000000..384f2db --- /dev/null +++ b/client/src/main/resources/lang/ru_Ru.properties @@ -0,0 +1,19 @@ +# main.fxml +main.menu.file=\uFFFD\uFFFD\uFFFD\uFFFD +main.menu.file.save=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD +main.menu.file.import=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD... +main.menu.file.language=\uFFFD\uFFFD\uFFFD\uFFFD +main.menu.file.language.item=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD +main.menu.edit=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD +main.menu.edit.addStation=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD +main.menu.edit.addItem=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD +main.menu.edit.editStation=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD +main.tab.items=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD +main.tab.stations=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD +main.tab.routes=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD + +# add item dialog +dialogs.addItem.title=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD +dialogs.addItem.message=\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD + + diff --git a/client/src/main/resources/view/itemDesc.fxml b/client/src/main/resources/view/itemDesc.fxml index 82e42f3..1fdb3ee 100644 --- a/client/src/main/resources/view/itemDesc.fxml +++ b/client/src/main/resources/view/itemDesc.fxml @@ -10,11 +10,11 @@ spacing="4" > -