Add i18n support for plugin itself

This commit is contained in:
Marcel Haßlinger 2021-03-14 15:32:07 +01:00
parent 73e4298f4b
commit 7fe4251b88
18 changed files with 112 additions and 64 deletions

View File

@ -17,6 +17,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.ResourceBundle;
/** /**
* Tool window factory which will represent the entire ui for this plugin. * Tool window factory which will represent the entire ui for this plugin.
@ -30,12 +31,16 @@ public class TranslatorToolWindowFactory implements ToolWindowFactory {
// Translations tree view // Translations tree view
TreeView treeView = new TreeView(project); TreeView treeView = new TreeView(project);
Content treeContent = contentFactory.createContent(treeView.getRootPanel(),"TreeView", false); Content treeContent = contentFactory.createContent(treeView.getRootPanel(),
ResourceBundle.getBundle("messages").getString("view.tree.title"), false);
toolWindow.getContentManager().addContent(treeContent); toolWindow.getContentManager().addContent(treeContent);
// Translations table view // Translations table view
TableView tableView = new TableView(project); TableView tableView = new TableView(project);
Content tableContent = contentFactory.createContent(tableView.getRootPanel(), "TableView", false); Content tableContent = contentFactory.createContent(tableView.getRootPanel(),
ResourceBundle.getBundle("messages").getString("view.table.title"), false);
toolWindow.getContentManager().addContent(tableContent); toolWindow.getContentManager().addContent(tableContent);
// ToolWindow Actions (Can be used for every view) // ToolWindow Actions (Can be used for every view)

View File

@ -11,6 +11,7 @@ import de.marhali.easyi18n.util.TreeUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import javax.swing.tree.TreePath; import javax.swing.tree.TreePath;
import java.util.ResourceBundle;
/** /**
* Add translation action. * Add translation action.
@ -19,7 +20,8 @@ import javax.swing.tree.TreePath;
public class AddAction extends AnAction { public class AddAction extends AnAction {
public AddAction() { public AddAction() {
super("Add Translation", null, AllIcons.General.Add); super(ResourceBundle.getBundle("messages").getString("action.add"),
null, AllIcons.General.Add);
} }
@Override @Override
@ -34,7 +36,8 @@ public class AddAction extends AnAction {
return null; return null;
} }
if(manager.getToolWindow().getContentManager().getSelectedContent().getDisplayName().equals("TreeView")) { if(manager.getToolWindow().getContentManager().getSelectedContent()
.getDisplayName().equals(ResourceBundle.getBundle("messages").getString("view.tree.title"))) {
TreePath path = manager.getTreeView().getTree().getSelectionPath(); TreePath path = manager.getTreeView().getTree().getSelectionPath();

View File

@ -8,6 +8,8 @@ import de.marhali.easyi18n.service.DataStore;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.ResourceBundle;
/** /**
* Reload translations action. * Reload translations action.
* @author marhali * @author marhali
@ -15,7 +17,8 @@ import org.jetbrains.annotations.NotNull;
public class ReloadAction extends AnAction { public class ReloadAction extends AnAction {
public ReloadAction() { public ReloadAction() {
super("Reload From Disk", null, AllIcons.Actions.Refresh); super(ResourceBundle.getBundle("messages").getString("action.reload"),
null, AllIcons.Actions.Refresh);
} }
@Override @Override

View File

@ -14,6 +14,7 @@ import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.awt.event.KeyAdapter; import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.util.ResourceBundle;
import java.util.function.Consumer; import java.util.function.Consumer;
/** /**
@ -26,7 +27,7 @@ public class SearchAction extends AnAction implements CustomComponentAction {
private JBTextField textField; private JBTextField textField;
public SearchAction(@NotNull Consumer<String> searchCallback) { public SearchAction(@NotNull Consumer<String> searchCallback) {
super("Search"); super(ResourceBundle.getBundle("messages").getString("action.search"));
this.searchCallback = searchCallback; this.searchCallback = searchCallback;
} }
@ -41,7 +42,7 @@ public class SearchAction extends AnAction implements CustomComponentAction {
public @NotNull JComponent createCustomComponent(@NotNull Presentation presentation, @NotNull String place) { public @NotNull JComponent createCustomComponent(@NotNull Presentation presentation, @NotNull String place) {
textField = new JBTextField(); textField = new JBTextField();
textField.setPreferredSize(new Dimension(160, 25)); textField.setPreferredSize(new Dimension(160, 25));
PromptSupport.setPrompt("Search Key...", textField); PromptSupport.setPrompt(ResourceBundle.getBundle("messages").getString("action.search"), textField);
textField.addKeyListener(handleKeyListener()); textField.addKeyListener(handleKeyListener());
textField.setBorder(JBUI.Borders.empty()); textField.setBorder(JBUI.Borders.empty());

View File

@ -6,6 +6,8 @@ import com.intellij.openapi.actionSystem.AnActionEvent;
import de.marhali.easyi18n.ui.dialog.SettingsDialog; import de.marhali.easyi18n.ui.dialog.SettingsDialog;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.ResourceBundle;
/** /**
* Plugin settings action. * Plugin settings action.
* @author marhali * @author marhali
@ -13,7 +15,8 @@ import org.jetbrains.annotations.NotNull;
public class SettingsAction extends AnAction { public class SettingsAction extends AnAction {
public SettingsAction() { public SettingsAction() {
super("Settings", null, AllIcons.General.Settings); super(ResourceBundle.getBundle("messages").getString("action.settings"),
null, AllIcons.General.Settings);
} }
@Override @Override

View File

@ -5,6 +5,8 @@ import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.AnActionEvent;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.ResourceBundle;
/** /**
* Action to collapse all tree nodes with children. * Action to collapse all tree nodes with children.
* @author marhali * @author marhali
@ -14,7 +16,9 @@ public class CollapseTreeViewAction extends AnAction {
private final Runnable collapseRunnable; private final Runnable collapseRunnable;
public CollapseTreeViewAction(Runnable collapseRunnable) { public CollapseTreeViewAction(Runnable collapseRunnable) {
super("Collapse Tree", null, AllIcons.Actions.Collapseall); super(ResourceBundle.getBundle("messages").getString("view.tree.collapse"),
null, AllIcons.Actions.Collapseall);
this.collapseRunnable = collapseRunnable; this.collapseRunnable = collapseRunnable;
} }

View File

@ -5,6 +5,8 @@ import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.AnActionEvent;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.ResourceBundle;
/** /**
* Action to expand the entire tree (open all nodes with children). * Action to expand the entire tree (open all nodes with children).
* @author marhali * @author marhali
@ -14,7 +16,9 @@ public class ExpandTreeViewAction extends AnAction {
private final Runnable expandRunnable; private final Runnable expandRunnable;
public ExpandTreeViewAction(Runnable expandRunnable) { public ExpandTreeViewAction(Runnable expandRunnable) {
super("Expand Tree", null, AllIcons.Actions.Expandall); super(ResourceBundle.getBundle("messages").getString("view.tree.expand"),
null, AllIcons.Actions.Expandall);
this.expandRunnable = expandRunnable; this.expandRunnable = expandRunnable;
} }

View File

@ -16,6 +16,7 @@ import javax.swing.border.EtchedBorder;
import java.awt.*; import java.awt.*;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.ResourceBundle;
/** /**
* Create translation dialog. * Create translation dialog.
@ -64,7 +65,7 @@ public class AddDialog {
rootPanel.setLayout(new BoxLayout(rootPanel, BoxLayout.PAGE_AXIS)); rootPanel.setLayout(new BoxLayout(rootPanel, BoxLayout.PAGE_AXIS));
JPanel keyPanel = new JPanel(new GridLayout(0, 1, 2, 2)); JPanel keyPanel = new JPanel(new GridLayout(0, 1, 2, 2));
JBLabel keyLabel = new JBLabel("Key"); JBLabel keyLabel = new JBLabel(ResourceBundle.getBundle("messages").getString("translation.key"));
keyTextField = new JBTextField(this.preKey); keyTextField = new JBTextField(this.preKey);
keyLabel.setLabelFor(keyTextField); keyLabel.setLabelFor(keyTextField);
keyPanel.add(keyLabel); keyPanel.add(keyLabel);
@ -85,11 +86,12 @@ public class AddDialog {
} }
JBScrollPane valuePane = new JBScrollPane(valuePanel); JBScrollPane valuePane = new JBScrollPane(valuePanel);
valuePane.setBorder(BorderFactory.createTitledBorder(new EtchedBorder(), "Locales")); valuePane.setBorder(BorderFactory.createTitledBorder(new EtchedBorder(),
ResourceBundle.getBundle("messages").getString("translation.locales")));
rootPanel.add(valuePane); rootPanel.add(valuePane);
DialogBuilder builder = new DialogBuilder(); DialogBuilder builder = new DialogBuilder();
builder.setTitle("Add Translation"); builder.setTitle(ResourceBundle.getBundle("messages").getString("action.add"));
builder.removeAllActions(); builder.removeAllActions();
builder.addOkAction(); builder.addOkAction();
builder.addCancelAction(); builder.addCancelAction();

View File

@ -17,6 +17,7 @@ import javax.swing.border.EtchedBorder;
import java.awt.*; import java.awt.*;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.ResourceBundle;
/** /**
* Edit translation dialog. * Edit translation dialog.
@ -63,7 +64,7 @@ public class EditDialog {
rootPanel.setLayout(new BoxLayout(rootPanel, BoxLayout.PAGE_AXIS)); rootPanel.setLayout(new BoxLayout(rootPanel, BoxLayout.PAGE_AXIS));
JPanel keyPanel = new JPanel(new GridLayout(0, 1, 2,2)); JPanel keyPanel = new JPanel(new GridLayout(0, 1, 2,2));
JBLabel keyLabel = new JBLabel("Key"); JBLabel keyLabel = new JBLabel(ResourceBundle.getBundle("messages").getString("translation.key"));
keyTextField = new JBTextField(this.origin.getKey()); keyTextField = new JBTextField(this.origin.getKey());
keyLabel.setLabelFor(keyTextField); keyLabel.setLabelFor(keyTextField);
keyPanel.add(keyLabel); keyPanel.add(keyLabel);
@ -84,11 +85,12 @@ public class EditDialog {
} }
JBScrollPane valuePane = new JBScrollPane(valuePanel); JBScrollPane valuePane = new JBScrollPane(valuePanel);
valuePane.setBorder(BorderFactory.createTitledBorder(new EtchedBorder(), "Locales")); valuePane.setBorder(BorderFactory.createTitledBorder(new EtchedBorder(),
ResourceBundle.getBundle("messages").getString("translation.locales")));
rootPanel.add(valuePane); rootPanel.add(valuePane);
DialogBuilder builder = new DialogBuilder(); DialogBuilder builder = new DialogBuilder();
builder.setTitle("Edit Translation"); builder.setTitle(ResourceBundle.getBundle("messages").getString("action.edit"));
builder.removeAllActions(); builder.removeAllActions();
builder.addCancelAction(); builder.addCancelAction();
builder.addActionDescriptor(new DeleteActionDescriptor()); builder.addActionDescriptor(new DeleteActionDescriptor());

View File

@ -13,6 +13,7 @@ import de.marhali.easyi18n.service.DataStore;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.util.ResourceBundle;
/** /**
* Plugin configuration dialog. * Plugin configuration dialog.
@ -45,17 +46,17 @@ public class SettingsDialog {
private DialogBuilder prepare(String localesPath, String previewLocale) { private DialogBuilder prepare(String localesPath, String previewLocale) {
JPanel rootPanel = new JPanel(new GridLayout(0, 1, 2, 2)); JPanel rootPanel = new JPanel(new GridLayout(0, 1, 2, 2));
JBLabel pathLabel = new JBLabel("Locales directory"); JBLabel pathLabel = new JBLabel(ResourceBundle.getBundle("messages").getString("settings.path.text"));
pathText = new TextFieldWithBrowseButton(new JTextField(localesPath)); pathText = new TextFieldWithBrowseButton(new JTextField(localesPath));
pathLabel.setLabelFor(pathText); pathLabel.setLabelFor(pathText);
pathText.addBrowseFolderListener("Locales Directory", null, project, new FileChooserDescriptor( pathText.addBrowseFolderListener(ResourceBundle.getBundle("messages").getString("settings.path.title"), null, project, new FileChooserDescriptor(
false, true, false, false, false, false)); false, true, false, false, false, false));
rootPanel.add(pathLabel); rootPanel.add(pathLabel);
rootPanel.add(pathText); rootPanel.add(pathText);
JBLabel previewLabel = new JBLabel("Preview locale"); JBLabel previewLabel = new JBLabel(ResourceBundle.getBundle("messages").getString("settings.preview"));
previewText = new JBTextField(previewLocale); previewText = new JBTextField(previewLocale);
previewLabel.setLabelFor(previewText); previewLabel.setLabelFor(previewText);
@ -63,7 +64,7 @@ public class SettingsDialog {
rootPanel.add(previewText); rootPanel.add(previewText);
DialogBuilder builder = new DialogBuilder(); DialogBuilder builder = new DialogBuilder();
builder.setTitle("Settings"); builder.setTitle(ResourceBundle.getBundle("messages").getString("action.settings"));
builder.removeAllActions(); builder.removeAllActions();
builder.addCancelAction(); builder.addCancelAction();
builder.addOkAction(); builder.addOkAction();

View File

@ -5,6 +5,7 @@ import com.intellij.openapi.ui.DialogWrapper;
import javax.swing.*; import javax.swing.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.util.ResourceBundle;
/** /**
* Delete action which represents the delete button on the edit translation dialog. * Delete action which represents the delete button on the edit translation dialog.
@ -18,7 +19,7 @@ public class DeleteActionDescriptor extends AbstractAction implements DialogBuil
private DialogWrapper dialogWrapper; private DialogWrapper dialogWrapper;
public DeleteActionDescriptor() { public DeleteActionDescriptor() {
super("Delete"); super(ResourceBundle.getBundle("messages").getString("action.delete"));
} }
@Override @Override

View File

@ -21,6 +21,7 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*; import javax.swing.*;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.util.ResourceBundle;
/** /**
* Shows translation state as table. * Shows translation state as table.
@ -39,7 +40,7 @@ public class TableView implements DataSynchronizer {
this.project = project; this.project = project;
table = new JBTable(); table = new JBTable();
table.getEmptyText().setText("Empty"); table.getEmptyText().setText(ResourceBundle.getBundle("messages").getString("view.empty"));
table.addMouseListener(new PopupClickListener(this::handlePopup)); table.addMouseListener(new PopupClickListener(this::handlePopup));
table.addKeyListener(new DeleteKeyListener(handleDeleteKey())); table.addKeyListener(new DeleteKeyListener(handleDeleteKey()));
table.setDefaultRenderer(String.class, new TableRenderer()); table.setDefaultRenderer(String.class, new TableRenderer());

View File

@ -28,6 +28,7 @@ import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath; import javax.swing.tree.TreePath;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.util.ResourceBundle;
/** /**
* Show translation state as tree. * Show translation state as tree.
@ -49,7 +50,7 @@ public class TreeView implements DataSynchronizer {
tree = new Tree(); tree = new Tree();
tree.setCellRenderer(new TreeRenderer()); tree.setCellRenderer(new TreeRenderer());
tree.setRootVisible(false); tree.setRootVisible(false);
tree.getEmptyText().setText("Empty"); tree.getEmptyText().setText(ResourceBundle.getBundle("messages").getString("view.empty"));
tree.addMouseListener(new PopupClickListener(this::handlePopup)); tree.addMouseListener(new PopupClickListener(this::handlePopup));
tree.addKeyListener(new DeleteKeyListener(handleDeleteKey())); tree.addKeyListener(new DeleteKeyListener(handleDeleteKey()));

View File

@ -1,6 +1,6 @@
<idea-plugin> <idea-plugin>
<id>de.marhali.easyi18n</id> <id>de.marhali.easyi18n</id>
<name>Easy-I18n</name> <name>easy-i18n</name>
<vendor>marhali</vendor> <vendor>marhali</vendor>
<!-- Product and plugin compatibility requirements --> <!-- Product and plugin compatibility requirements -->
@ -8,7 +8,7 @@
<depends>com.intellij.modules.lang</depends> <depends>com.intellij.modules.lang</depends>
<extensions defaultExtensionNs="com.intellij"> <extensions defaultExtensionNs="com.intellij">
<toolWindow id="Translator" anchor="bottom" factoryClass="de.marhali.easyi18n.TranslatorToolWindowFactory" /> <toolWindow id="Easy I18n" anchor="bottom" factoryClass="de.marhali.easyi18n.TranslatorToolWindowFactory" />
<projectService serviceImplementation="de.marhali.easyi18n.service.SettingsService" /> <projectService serviceImplementation="de.marhali.easyi18n.service.SettingsService" />
</extensions> </extensions>
</idea-plugin> </idea-plugin>

View File

@ -1,45 +1,46 @@
<svg xmlns="http://www.w3.org/2000/svg" width="81" height="80" viewBox="0 0 81 80"> <?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 81 80" width="81" height="80" xmlns="http://www.w3.org/2000/svg">
<defs> <defs>
<linearGradient id="pluginsdk_80-a" x1="-.031%" x2="100.053%" y1="49.963%" y2="49.963%"> <linearGradient id="pluginsdk_80-a" x1="-.031%" x2="100.053%" y1="49.963%" y2="49.963%">
<stop offset="25.81%" stop-color="#F97A12"/> <stop offset="0.2581" stop-color="#F97A12"/>
<stop offset="45.91%" stop-color="#B07B58"/> <stop offset="0.4591" stop-color="#B07B58"/>
<stop offset="72.41%" stop-color="#577BAE"/> <stop offset="0.7241" stop-color="#577BAE"/>
<stop offset="91.05%" stop-color="#1E7CE5"/> <stop offset="0.9105" stop-color="#1E7CE5"/>
<stop offset="100%" stop-color="#087CFA"/> <stop offset="1" stop-color="#087CFA"/>
</linearGradient> </linearGradient>
<linearGradient id="pluginsdk_80-b" x1="27.55%" x2="82.223%" y1="34.514%" y2="77.605%"> <linearGradient id="pluginsdk_80-b" x1="27.55%" x2="82.223%" y1="34.514%" y2="77.605%">
<stop offset="0%" stop-color="#F97A12"/> <stop offset="0" stop-color="#F97A12"/>
<stop offset="7.18%" stop-color="#CB7A3E"/> <stop offset="0.0718" stop-color="#CB7A3E"/>
<stop offset="15.41%" stop-color="#9E7B6A"/> <stop offset="0.1541" stop-color="#9E7B6A"/>
<stop offset="24.2%" stop-color="#757B91"/> <stop offset="0.242" stop-color="#757B91"/>
<stop offset="33.44%" stop-color="#537BB1"/> <stop offset="0.3344" stop-color="#537BB1"/>
<stop offset="43.24%" stop-color="#387CCC"/> <stop offset="0.4324" stop-color="#387CCC"/>
<stop offset="53.81%" stop-color="#237CE0"/> <stop offset="0.5381" stop-color="#237CE0"/>
<stop offset="65.52%" stop-color="#147CEF"/> <stop offset="0.6552" stop-color="#147CEF"/>
<stop offset="79.25%" stop-color="#0B7CF7"/> <stop offset="0.7925" stop-color="#0B7CF7"/>
<stop offset="100%" stop-color="#087CFA"/> <stop offset="1" stop-color="#087CFA"/>
</linearGradient> </linearGradient>
<linearGradient id="pluginsdk_80-c" x1="63.121%" x2="40.793%" y1="97.699%" y2="-6.587%"> <linearGradient id="pluginsdk_80-c" x1="63.121%" x2="40.793%" y1="97.699%" y2="-6.587%">
<stop offset="0%" stop-color="#FE315D"/> <stop offset="0" stop-color="#FE315D"/>
<stop offset="7.84%" stop-color="#CB417E"/> <stop offset="0.0784" stop-color="#CB417E"/>
<stop offset="16.01%" stop-color="#9E4E9B"/> <stop offset="0.1601" stop-color="#9E4E9B"/>
<stop offset="24.74%" stop-color="#755BB4"/> <stop offset="0.2474" stop-color="#755BB4"/>
<stop offset="33.92%" stop-color="#5365CA"/> <stop offset="0.3392" stop-color="#5365CA"/>
<stop offset="43.65%" stop-color="#386DDB"/> <stop offset="0.4365" stop-color="#386DDB"/>
<stop offset="54.14%" stop-color="#2374E9"/> <stop offset="0.5414" stop-color="#2374E9"/>
<stop offset="65.76%" stop-color="#1478F3"/> <stop offset="0.6576" stop-color="#1478F3"/>
<stop offset="79.4%" stop-color="#0B7BF8"/> <stop offset="0.794" stop-color="#0B7BF8"/>
<stop offset="100%" stop-color="#087CFA"/> <stop offset="1" stop-color="#087CFA"/>
</linearGradient> </linearGradient>
<linearGradient id="pluginsdk_80-d" x1="25.331%" x2="93.854%" y1="24.119%" y2="132.621%"> <linearGradient id="pluginsdk_80-d" x1="25.331%" x2="93.854%" y1="24.119%" y2="132.621%">
<stop offset="0%" stop-color="#FE315D"/> <stop offset="0" stop-color="#FE315D"/>
<stop offset="4.023%" stop-color="#F63462"/> <stop offset="0.0402" stop-color="#F63462"/>
<stop offset="10.37%" stop-color="#DF3A71"/> <stop offset="0.1037" stop-color="#DF3A71"/>
<stop offset="16.67%" stop-color="#C24383"/> <stop offset="0.1667" stop-color="#C24383"/>
<stop offset="29.12%" stop-color="#AD4A91"/> <stop offset="0.2912" stop-color="#AD4A91"/>
<stop offset="54.98%" stop-color="#755BB4"/> <stop offset="0.5498" stop-color="#755BB4"/>
<stop offset="91.75%" stop-color="#1D76ED"/> <stop offset="0.9175" stop-color="#1D76ED"/>
<stop offset="100%" stop-color="#087CFA"/> <stop offset="1" stop-color="#087CFA"/>
</linearGradient> </linearGradient>
</defs> </defs>
<g fill="none" fill-rule="evenodd"> <g fill="none" fill-rule="evenodd">
@ -52,7 +53,10 @@
<g fill-rule="nonzero" transform="translate(12 12)"> <g fill-rule="nonzero" transform="translate(12 12)">
<rect width="56" height="56" fill="#000"/> <rect width="56" height="56" fill="#000"/>
<rect width="22" height="4" x="4" y="46" fill="#FFFEFE"/> <rect width="22" height="4" x="4" y="46" fill="#FFFEFE"/>
<path fill="#FFFEFE" d="M11.128,25.28 C8.584,25.28 6.016,24.392 4,22.592 L6.184,19.976 C7.696,21.224 9.28,22.016 11.2,22.016 C12.712,22.016 13.624,21.416 13.624,20.432 L13.624,20.384 C13.624,19.448 13.048,18.968 10.24,18.248 C6.856,17.384 4.672,16.448 4.672,13.112 L4.672,13.064 C4.672,10.016 7.12,8 10.552,8 C13,8 15.088,8.768 16.792,10.136 L14.872,12.92 C13.384,11.888 11.92,11.264 10.504,11.264 C9.088,11.264 8.344,11.912 8.344,12.728 L8.344,12.776 C8.344,13.88 9.064,14.24 11.968,14.984 C15.376,15.872 17.296,17.096 17.296,20.024 L17.296,20.072 C17.296,23.408 14.752,25.28 11.128,25.28 Z M19.512,25.04 L19.512,8.24 L26.064,8.24 C31.344,8.24 34.992,11.864 34.992,16.592 L34.992,16.64 C34.992,21.368 31.344,25.04 26.064,25.04 L19.512,25.04 Z M26.064,11.576 L23.208,11.576 L23.208,21.704 L26.064,21.704 C29.088,21.704 31.128,19.664 31.128,16.688 L31.128,16.64 C31.128,13.664 29.088,11.576 26.064,11.576 Z M37.28,25.04 L37.28,8.24 L40.976,8.24 L40.976,15.584 L47.744,8.24 L52.28,8.24 L45.416,15.368 L52.568,25.04 L48.128,25.04 L42.92,17.888 L40.976,19.904 L40.976,25.04 L37.28,25.04 Z"/>
</g> </g>
</g> </g>
</svg> <text style="fill: rgb(255, 254, 254); white-space: pre;" x="34.104" y="20.751" dx="-18.382" dy="8.786">easy
</text>
<text x="21.965" y="47.919" style="white-space: pre; fill: rgb(255, 254, 254); font-size: 15px;">i18n
</text>
</svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -0,0 +1,16 @@
view.tree.title=TreeView
view.tree.collapse=Collapse Tree
view.tree.expand=Expand Tree
view.table.title=TableView
view.empty=No translations found. Click on settings to specify a locales directory or reload
action.add=Add Translation
action.edit=Edit Translation
action.reload=Reload From Disk
action.settings=Settings
action.search=Search Key...
action.delete=Delete
translation.key=Key
translation.locales=Locales
settings.path.title=Locales Directory
settings.path.text=Locales directory
settings.preview=Preview locale

View File

@ -1,3 +0,0 @@
name=My Plugin
applicationService=Application service
projectService=Project service: {0}