diff options
author | Adrien Hopkins <adrien.p.hopkins@gmail.com> | 2025-02-23 20:23:47 -0500 |
---|---|---|
committer | Adrien Hopkins <adrien.p.hopkins@gmail.com> | 2025-02-23 20:36:03 -0500 |
commit | 9c358d708ba4988648d7b19ccb842f076ec4c354 (patch) | |
tree | 92609c64a7c96fcdd0f20b63bca9c6effe8dd97d | |
parent | 4436b29053a0b757562ecc1d0a78e22902e6e5ae (diff) |
Allow internationalization of about.txt
This works with custom locales (by placing the text in
[config_dir]/about/[name].txt), but if such a file does not exist, it
will default to the default locale (en)'s about text.
-rw-r--r-- | src/main/java/sevenUnitsGUI/Presenter.java | 43 | ||||
-rw-r--r-- | src/main/java/sevenUnitsGUI/TabbedView.java | 13 | ||||
-rw-r--r-- | src/main/resources/about/en.txt (renamed from src/main/resources/about.txt) | 2 | ||||
-rw-r--r-- | src/main/resources/about/fr.txt | 24 | ||||
-rw-r--r-- | src/main/resources/locales/en.txt | 1 | ||||
-rw-r--r-- | src/main/resources/locales/fr.txt | 1 |
6 files changed, 66 insertions, 18 deletions
diff --git a/src/main/java/sevenUnitsGUI/Presenter.java b/src/main/java/sevenUnitsGUI/Presenter.java index ba600e3..3a039a7 100644 --- a/src/main/java/sevenUnitsGUI/Presenter.java +++ b/src/main/java/sevenUnitsGUI/Presenter.java @@ -780,7 +780,27 @@ public final class Presenter { * @since 2022-02-19 */ public String getAboutText() { - return Presenter.getLinesFromResource("/about.txt").stream() + final Path customFilepath = Presenter.pathFromConfig( + "about/" + this.userLocale + ".txt"); + if (Files.exists(customFilepath)) { + try { + return formatAboutText(Files.lines(customFilepath)); + } catch (IOException e) { + final String filename = String.format("/about/%s.txt", this.userLocale); + return formatAboutText(Presenter.getLinesFromResource(filename).stream()); + } + } else if (LOCAL_LOCALES.contains(this.userLocale)) { + final String filename = String.format("/about/%s.txt", this.userLocale); + return formatAboutText(Presenter.getLinesFromResource(filename).stream()); + } else { + final String filename = String.format("/about/%s.txt", DEFAULT_LOCALE); + return formatAboutText(Presenter.getLinesFromResource(filename).stream()); + } + + } + + private String formatAboutText(Stream<String> rawLines) { + return rawLines .map(Presenter::withoutComments).collect(Collectors.joining("\n")) .replaceAll("\\[VERSION\\]", ProgramInfo.VERSION.toString()) .replaceAll("\\[LOADSTATS\\]", wrapString(this.loadStatMsg(), 72)); @@ -1057,16 +1077,17 @@ public final class Presenter { * @since 2024-08-22 */ private String loadStatMsg() { - return String.format( - "Successfully loaded %d unique units with %d names (%d base units), %d unique prefixes with %d names, %d unit sets, and %d named dimensions.", - this.database.unitMapPrefixless(false).size(), - this.database.unitMapPrefixless(true).size(), - this.database.unitMapPrefixless(false).values().stream() - .filter(IS_FULL_BASE).count(), - this.database.prefixMap(false).size(), - this.database.prefixMap(true).size(), - this.database.unitSetMap().size(), - this.database.dimensionMap().size()); + return this.getLocalizedText("load_stat_msg") + .replace("[u]", Integer.toString( + this.database.unitMapPrefixless(false).size())) + .replace("[un]", Integer.toString( + this.database.unitMapPrefixless(true).size())) + .replace("[b]", Long.toString(this.database.unitMapPrefixless(false) + .values().stream().filter(IS_FULL_BASE).count())) + .replace("[p]", Integer.toString(this.database.prefixMap(false).size())) + .replace("[pn]", Integer.toString(this.database.prefixMap(true).size())) + .replace("[s]", Integer.toString(this.database.unitSetMap().size())) + .replace("[d]", Integer.toString(this.database.dimensionMap().size())); } /** diff --git a/src/main/java/sevenUnitsGUI/TabbedView.java b/src/main/java/sevenUnitsGUI/TabbedView.java index 40ed0a7..9850aac 100644 --- a/src/main/java/sevenUnitsGUI/TabbedView.java +++ b/src/main/java/sevenUnitsGUI/TabbedView.java @@ -198,7 +198,8 @@ final class TabbedView implements ExpressionConversionView, UnitConversionView { /** The text box for prefix data in the prefix viewer */ private final JTextArea prefixTextBox; - // SETTINGS STUFF + // INFO & SETTINGS STUFF + final JTextArea infoTextArea; private final JComboBox<String> localeSelector; private StandardRoundingType roundingType; private int precision; @@ -377,11 +378,10 @@ final class TabbedView implements ExpressionConversionView, UnitConversionView { this.masterPane.addTab("\uD83D\uDEC8", // info (i) character new JScrollPane(infoPanel)); - final JTextArea infoTextArea = new JTextArea(); - infoTextArea.setEditable(false); - infoTextArea.setOpaque(false); - infoPanel.add(infoTextArea); - infoTextArea.setText(this.presenter.getAboutText()); + this.infoTextArea = new JTextArea(); + this.infoTextArea.setEditable(false); + this.infoTextArea.setOpaque(false); + infoPanel.add(this.infoTextArea); // ============ SETTINGS PANEL ============ this.localeSelector = new JComboBox<>(); @@ -907,6 +907,7 @@ final class TabbedView implements ExpressionConversionView, UnitConversionView { public void updateText() { this.frame.setTitle(this.presenter.getLocalizedText("tv.title") .replace("[v]", ProgramInfo.VERSION.toString())); + this.infoTextArea.setText(this.presenter.getAboutText()); this.localizedTextSetters.forEach((id, action) -> action.accept(this.presenter.getLocalizedText(id))); } diff --git a/src/main/resources/about.txt b/src/main/resources/about/en.txt index 4c33f8c..068f922 100644 --- a/src/main/resources/about.txt +++ b/src/main/resources/about/en.txt @@ -15,7 +15,7 @@ Unit/Prefix/Dimension Statistics: Copyright Notice: -Unit Converter Copyright (C) 2018-2024 Adrien Hopkins +Unit Converter Copyright (C) 2018-2025 Adrien Hopkins This program comes with ABSOLUTELY NO WARRANTY; for details read the LICENSE file, section 15 diff --git a/src/main/resources/about/fr.txt b/src/main/resources/about/fr.txt new file mode 100644 index 0000000..d8d82aa --- /dev/null +++ b/src/main/resources/about/fr.txt @@ -0,0 +1,24 @@ +À propos de 7Unités version [VERSION] + +7Unités est une programme pour convertir les unités avec plusieurs fonctions, +inspiré par GNU Units (https://www.gnu.org/software/units/). +Vous pouvez l’utiliser pour convertir des unités, mais vous pouvez aussi +l’utiliser comme calculatrice, computer et convertir des expressions +comme "10 m/s + (25^2 - 5^2) mi/hr". + +Ce logiciel est par Adrien Hopkins <adrien.p.hopkins@gmail.com>. + +Statistiques d’unités, préfixes et dimensions: + +[LOADSTATS] + +Copyright Notice: + +Unit Converter Copyright (C) 2018-2025 Adrien Hopkins +This program comes with ABSOLUTELY NO WARRANTY; +for details read the LICENSE file, section 15 + +This is free software, and you are welcome to redistribute +it under certain conditions; for details go to +<https://www.gnu.org/licenses/quick-guide-gplv3.html> +or read the LICENSE file. diff --git a/src/main/resources/locales/en.txt b/src/main/resources/locales/en.txt index 5173cf3..666e363 100644 --- a/src/main/resources/locales/en.txt +++ b/src/main/resources/locales/en.txt @@ -28,3 +28,4 @@ tv.settings.show_duplicate=Show Duplicate Units & Prefixes tv.settings.use_default_files=Use Default Datafiles tv.settings.locale=🌐 Locale: tv.settings.unitfiles.button=Manage Unit Data Files +load_stat_msg=Successfully loaded [u] unique units with [un] names ([b] base units), [p] unique prefixes with [pn] names, [s] unit sets, and [d] named dimensions. diff --git a/src/main/resources/locales/fr.txt b/src/main/resources/locales/fr.txt index e8b7138..3fef030 100644 --- a/src/main/resources/locales/fr.txt +++ b/src/main/resources/locales/fr.txt @@ -28,3 +28,4 @@ tv.settings.show_duplicate=Montrer unités et préfixes doubles tv.settings.use_default_files=Utilise donées par défaut tv.settings.locale=🌐 Locale: tv.settings.unitfiles.button=Gérer donées d’unités +load_stat_msg=Chargé [u] unités uniques avec [un] noms ([b] unités bases), [p] préfixes uniques avec [pn] noms, [s] collections d’unités, et [d] dimensions nomées. |