From a709db810e8cb39048579f1e05f3dbdc5173f556 Mon Sep 17 00:00:00 2001 From: JPilson Date: Sat, 16 Dec 2023 17:50:29 +0100 Subject: [PATCH] Add i18n flavor template setting A new setting, `flavorTemplate` is introduced to specify how strings are replaced with i18n representation. This includes code modifications for handling this new feature and also updates in the messages.properties file for the associated UI text. The feature is especially useful for customizing how localization strings are generated in different project setups. --- .../easyi18n/settings/ProjectSettings.java | 1 + .../settings/ProjectSettingsComponent.java | 11 ++++++++++- .../settings/ProjectSettingsComponentState.java | 5 +++++ .../easyi18n/settings/ProjectSettingsState.java | 16 ++++++++++++++-- .../settings/presets/ReactI18NextPreset.java | 5 +++++ .../easyi18n/settings/presets/VueI18nPreset.java | 5 +++++ src/main/resources/messages.properties | 2 ++ 7 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/marhali/easyi18n/settings/ProjectSettings.java b/src/main/java/de/marhali/easyi18n/settings/ProjectSettings.java index 5da91a5..019408a 100644 --- a/src/main/java/de/marhali/easyi18n/settings/ProjectSettings.java +++ b/src/main/java/de/marhali/easyi18n/settings/ProjectSettings.java @@ -33,4 +33,5 @@ public interface ProjectSettings { // Experimental Configuration boolean isAlwaysFold(); + String getFlavorTemplate(); } diff --git a/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsComponent.java b/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsComponent.java index 9018437..4f8fbbb 100644 --- a/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsComponent.java +++ b/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsComponent.java @@ -26,6 +26,7 @@ import java.util.ResourceBundle; /** * Configuration panel with all possible options for this plugin. + * * @author marhali */ public class ProjectSettingsComponent extends ProjectSettingsComponentState { @@ -64,10 +65,12 @@ public class ProjectSettingsComponent extends ProjectSettingsComponentState { .addVerticalGap(24) .addComponent(new TitledSeparator(bundle.getString("settings.experimental.title"))) .addComponent(constructAlwaysFoldField()) + .addLabeledComponent(bundle.getString("settings.experimental.flavor-template"), constructFlavorTemplate(), 1, false) .addComponentFillVertically(new JPanel(), 0) .getPanel(); } + private JComponent constructPresetField() { preset = new ComboBox<>(Preset.values()); preset.setToolTipText(bundle.getString("settings.preset.tooltip")); @@ -219,9 +222,15 @@ public class ProjectSettingsComponent extends ProjectSettingsComponentState { return alwaysFold; } + private JComponent constructFlavorTemplate() { + flavorTemplate = new ExtendableTextField(20); + flavorTemplate.setToolTipText(bundle.getString("settings.experimental.flavor-template-tooltip")); + return flavorTemplate; + } + private ItemListener handleParserChange() { return e -> { - if(e.getStateChange() == ItemEvent.SELECTED) { + if (e.getStateChange() == ItemEvent.SELECTED) { // Automatically suggest file pattern option on parser change ParserStrategyType newStrategy = ParserStrategyType.fromIndex(parserStrategy.getSelectedIndex()); filePattern.setText(newStrategy.getExampleFilePattern()); diff --git a/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsComponentState.java b/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsComponentState.java index 863dd44..e3cb792 100644 --- a/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsComponentState.java +++ b/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsComponentState.java @@ -40,6 +40,8 @@ public class ProjectSettingsComponentState { // Experimental configuration protected JCheckBox alwaysFold; + protected JTextField flavorTemplate; + protected ProjectSettingsState getState() { // Every field needs to provide its state ProjectSettingsState state = new ProjectSettingsState(); @@ -63,6 +65,7 @@ public class ProjectSettingsComponentState { state.setAssistance(assistance.isSelected()); state.setAlwaysFold(alwaysFold.isSelected()); + state.setFlavorTemplate(flavorTemplate.getText()); return state; } @@ -88,5 +91,7 @@ public class ProjectSettingsComponentState { assistance.setSelected(state.isAssistance()); alwaysFold.setSelected(state.isAlwaysFold()); + + flavorTemplate.setText(state.getFlavorTemplate()); } } diff --git a/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsState.java b/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsState.java index a8648a2..10a5947 100644 --- a/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsState.java +++ b/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsState.java @@ -39,6 +39,7 @@ public class ProjectSettingsState implements ProjectSettings { // Experimental configuration @Property private Boolean alwaysFold; + @Property private String flavorTemplate; public ProjectSettingsState() { this(new DefaultPreset()); @@ -65,6 +66,7 @@ public class ProjectSettingsState implements ProjectSettings { this.assistance = defaults.isAssistance(); this.alwaysFold = defaults.isAlwaysFold(); + this.flavorTemplate = defaults.getFlavorTemplate(); } @Override @@ -143,6 +145,11 @@ public class ProjectSettingsState implements ProjectSettings { return alwaysFold; } + @Override + public String getFlavorTemplate() { + return this.flavorTemplate; + } + public void setLocalesDirectory(String localesDirectory) { this.localesDirectory = localesDirectory; } @@ -202,6 +209,9 @@ public class ProjectSettingsState implements ProjectSettings { public void setAlwaysFold(Boolean alwaysFold) { this.alwaysFold = alwaysFold; } + public void setFlavorTemplate(String flavorTemplate){ + this.flavorTemplate = flavorTemplate; + } @Override public boolean equals(Object o) { @@ -222,7 +232,8 @@ public class ProjectSettingsState implements ProjectSettings { && Objects.equals(previewLocale, that.previewLocale) && Objects.equals(nestedKeys, that.nestedKeys) && Objects.equals(assistance, that.assistance) - && Objects.equals(alwaysFold, that.alwaysFold); + && Objects.equals(alwaysFold, that.alwaysFold) + && Objects.equals(flavorTemplate,that.flavorTemplate); } @Override @@ -230,7 +241,7 @@ public class ProjectSettingsState implements ProjectSettings { return Objects.hash( localesDirectory, folderStrategy, parserStrategy, filePattern, includeSubDirs, sorting, namespaceDelimiter, sectionDelimiter, contextDelimiter, pluralDelimiter, - defaultNamespace, previewLocale, nestedKeys, assistance, alwaysFold + defaultNamespace, previewLocale, nestedKeys, assistance, alwaysFold,flavorTemplate ); } @@ -252,6 +263,7 @@ public class ProjectSettingsState implements ProjectSettings { ", nestedKeys=" + nestedKeys + ", assistance=" + assistance + ", alwaysFold=" + alwaysFold + + ", flavorTemplate=" + flavorTemplate + '}'; } } diff --git a/src/main/java/de/marhali/easyi18n/settings/presets/ReactI18NextPreset.java b/src/main/java/de/marhali/easyi18n/settings/presets/ReactI18NextPreset.java index ef536d3..26c16b7 100644 --- a/src/main/java/de/marhali/easyi18n/settings/presets/ReactI18NextPreset.java +++ b/src/main/java/de/marhali/easyi18n/settings/presets/ReactI18NextPreset.java @@ -86,4 +86,9 @@ public class ReactI18NextPreset implements ProjectSettings { public boolean isAlwaysFold() { return false; } + + @Override + public String getFlavorTemplate() { + return "$i18n.t"; + } } diff --git a/src/main/java/de/marhali/easyi18n/settings/presets/VueI18nPreset.java b/src/main/java/de/marhali/easyi18n/settings/presets/VueI18nPreset.java index 55ddfbe..491edf8 100644 --- a/src/main/java/de/marhali/easyi18n/settings/presets/VueI18nPreset.java +++ b/src/main/java/de/marhali/easyi18n/settings/presets/VueI18nPreset.java @@ -85,4 +85,9 @@ public class VueI18nPreset implements ProjectSettings { public boolean isAlwaysFold() { return false; } + + @Override + public String getFlavorTemplate() { + return "$i18n.t"; + } } diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 69ac416..f9a8831 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -60,6 +60,8 @@ settings.editor.assistance.tooltip=Activates editor support to reference, auto-c settings.experimental.title=Experimental Configuration settings.experimental.always-fold.title=Always fold translation keys settings.experimental.always-fold.tooltip=Forces the editor to always display the value behind a translation key. The value cannot be unfolded when this function is active. +settings.experimental.flavor-template =I18n flavor template +settings.experimental.flavor-template-tooltip = Specify How to replace strings with i18n representation. error.io=An error occurred while processing translation files. \n\ Config: {0} => {1} ({2}) \n\ Path: {3} \n\