Browse files

Layout support for right-to-left languages added.

  • Loading branch information...
1 parent ed7e7db commit 6970472e4fa7992b8399dcc0568532d4df78cf0d @Raptor399 Raptor399 committed Apr 22, 2012
View
149 src/main/java/net/pms/encoders/MEncoderVideo.java
@@ -21,6 +21,7 @@
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
+import java.awt.ComponentOrientation;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -34,6 +35,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Locale;
import java.util.StringTokenizer;
import javax.swing.JButton;
@@ -74,6 +76,7 @@
import net.pms.newgui.MyComboBoxModel;
import net.pms.newgui.RestrictedFileSystemView;
import net.pms.util.CodecUtil;
+import net.pms.util.FormLayoutUtil;
import net.pms.util.ProcessUtil;
import org.apache.commons.lang.StringUtils;
@@ -91,6 +94,8 @@
public class MEncoderVideo extends Player {
private static final Logger LOGGER = LoggerFactory.getLogger(MEncoderVideo.class);
+ private static final String COL_SPEC = "left:pref, 3dlu, p:grow, 3dlu, right:p:grow, 3dlu, p:grow, 3dlu, right:p:grow,3dlu, p:grow, 3dlu, right:p:grow,3dlu, pref:grow";
+ private static final String ROW_SPEC = "p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu,p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 9dlu, p, 2dlu, p, 2dlu, p , 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p";
private JTextField mencoder_ass_scale;
private JTextField mencoder_ass_margin;
@@ -205,9 +210,12 @@ public MEncoderVideo(PmsConfiguration configuration) {
@Override
public JComponent config() {
- FormLayout layout = new FormLayout(
- "left:pref, 3dlu, p:grow, 3dlu, right:p:grow, 3dlu, p:grow, 3dlu, right:p:grow,3dlu, p:grow, 3dlu, right:p:grow,3dlu, pref:grow",
- "p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu,p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 9dlu, p, 2dlu, p, 2dlu, p , 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p");
+ // Apply the orientation for the locale
+ Locale locale = new Locale(configuration.getLanguage());
+ ComponentOrientation orientation = ComponentOrientation.getOrientation(locale);
+ String colSpec = FormLayoutUtil.getColSpec(COL_SPEC, orientation);
+
+ FormLayout layout = new FormLayout(colSpec, ROW_SPEC);
PanelBuilder builder = new PanelBuilder(layout);
builder.setBorder(Borders.EMPTY_BORDER);
builder.setOpaque(false);
@@ -227,7 +235,7 @@ public void itemStateChanged(ItemEvent e) {
}
});
- JComponent cmp = builder.addSeparator(Messages.getString("MEncoderVideo.1"), cc.xyw(1, 1, 15));
+ JComponent cmp = builder.addSeparator(Messages.getString("MEncoderVideo.1"), FormLayoutUtil.flip(cc.xyw(1, 1, 15), colSpec, orientation));
cmp = (JComponent) cmp.getComponent(0);
cmp.setFont(cmp.getFont().deriveFont(Font.BOLD));
@@ -247,8 +255,8 @@ public void actionPerformed(ActionEvent e) {
mencodermt.setEnabled(Platform.isWindows() || Platform.isMac());
- builder.add(mencodermt, cc.xy(1, 3));
- builder.add(checkBox, cc.xyw(3, 3, 12));
+ builder.add(mencodermt, FormLayoutUtil.flip(cc.xy(1, 3), colSpec, orientation));
+ builder.add(checkBox, FormLayoutUtil.flip(cc.xyw(3, 3, 12), colSpec, orientation));
noskip = new JCheckBox(Messages.getString("MEncoderVideo.2"));
noskip.setContentAreaFilled(false);
@@ -263,7 +271,7 @@ public void itemStateChanged(ItemEvent e) {
}
});
- builder.add(noskip, cc.xy(1, 5));
+ builder.add(noskip, FormLayoutUtil.flip(cc.xy(1, 5), colSpec, orientation));
JButton button = new JButton(Messages.getString("MEncoderVideo.29"));
button.addActionListener(new ActionListener() {
@@ -338,7 +346,7 @@ public void itemStateChanged(ItemEvent e) {
}
});
- builder.add(button, cc.xyw(1, 11, 2));
+ builder.add(button, FormLayoutUtil.flip(cc.xyw(1, 11, 2), colSpec, orientation));
forcefps = new JCheckBox(Messages.getString("MEncoderVideo.4"));
forcefps.setContentAreaFilled(false);
@@ -353,7 +361,7 @@ public void itemStateChanged(ItemEvent e) {
}
});
- builder.add(forcefps, cc.xyw(1, 7, 2));
+ builder.add(forcefps, FormLayoutUtil.flip(cc.xyw(1, 7, 2), colSpec, orientation));
yadif = new JCheckBox(Messages.getString("MEncoderVideo.26"));
yadif.setContentAreaFilled(false);
@@ -368,7 +376,7 @@ public void itemStateChanged(ItemEvent e) {
}
});
- builder.add(yadif, cc.xyw(3, 7, 7));
+ builder.add(yadif, FormLayoutUtil.flip(cc.xyw(3, 7, 7), colSpec, orientation));
scaler = new JCheckBox(Messages.getString("MEncoderVideo.27"));
scaler.setContentAreaFilled(false);
@@ -380,9 +388,9 @@ public void itemStateChanged(ItemEvent e) {
}
});
- builder.add(scaler, cc.xyw(3, 5, 7));
+ builder.add(scaler, FormLayoutUtil.flip(cc.xyw(3, 5, 7), colSpec, orientation));
- builder.addLabel(Messages.getString("MEncoderVideo.28"), cc.xyw(10, 5, 3, CellConstraints.RIGHT, CellConstraints.CENTER));
+ builder.addLabel(Messages.getString("MEncoderVideo.28"), FormLayoutUtil.flip(cc.xyw(10, 5, 3, CellConstraints.RIGHT, CellConstraints.CENTER), colSpec, orientation));
scaleX = new JTextField("" + configuration.getMencoderScaleX());
scaleX.addKeyListener(new KeyListener() {
@Override
@@ -403,8 +411,8 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.add(scaleX, cc.xyw(13, 5, 3));
- builder.addLabel(Messages.getString("MEncoderVideo.30"), cc.xyw(10, 7, 3, CellConstraints.RIGHT, CellConstraints.CENTER));
+ builder.add(scaleX, FormLayoutUtil.flip(cc.xyw(13, 5, 3), colSpec, orientation));
+ builder.addLabel(Messages.getString("MEncoderVideo.30"), FormLayoutUtil.flip(cc.xyw(10, 7, 3, CellConstraints.RIGHT, CellConstraints.CENTER), colSpec, orientation));
scaleY = new JTextField("" + configuration.getMencoderScaleY());
scaleY.addKeyListener(new KeyListener() {
@Override
@@ -425,7 +433,7 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.add(scaleY, cc.xyw(13, 7, 3));
+ builder.add(scaleY, FormLayoutUtil.flip(cc.xyw(13, 7, 3), colSpec, orientation));
if (configuration.isMencoderScaler()) {
scaler.setSelected(true);
@@ -447,13 +455,13 @@ public void itemStateChanged(ItemEvent e) {
}
});
- builder.add(videoremux, cc.xyw(1, 9, 13));
+ builder.add(videoremux, FormLayoutUtil.flip(cc.xyw(1, 9, 13), colSpec, orientation));
- cmp = builder.addSeparator(Messages.getString("MEncoderVideo.5"), cc.xyw(1, 19, 15));
+ cmp = builder.addSeparator(Messages.getString("MEncoderVideo.5"), FormLayoutUtil.flip(cc.xyw(1, 19, 15), colSpec, orientation));
cmp = (JComponent) cmp.getComponent(0);
cmp.setFont(cmp.getFont().deriveFont(Font.BOLD));
- builder.addLabel(Messages.getString("MEncoderVideo.6"), cc.xy(1, 21));
+ builder.addLabel(Messages.getString("MEncoderVideo.6"), FormLayoutUtil.flip(cc.xy(1, 21), colSpec, orientation));
mencoder_custom_options = new JTextField(configuration.getMencoderCustomOptions());
mencoder_custom_options.addKeyListener(new KeyListener() {
@Override
@@ -470,8 +478,8 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.add(mencoder_custom_options, cc.xyw(3, 21, 13));
- builder.addLabel(Messages.getString("MEncoderVideo.7"), cc.xyw(1, 23, 15));
+ builder.add(mencoder_custom_options, FormLayoutUtil.flip(cc.xyw(3, 21, 13), colSpec, orientation));
+ builder.addLabel(Messages.getString("MEncoderVideo.7"), FormLayoutUtil.flip(cc.xyw(1, 23, 15), colSpec, orientation));
langs = new JTextField(configuration.getMencoderAudioLanguages());
langs.addKeyListener(new KeyListener() {
@@ -489,13 +497,13 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.add(langs, cc.xyw(3, 23, 8));
+ builder.add(langs, FormLayoutUtil.flip(cc.xyw(3, 23, 8), colSpec, orientation));
- cmp = builder.addSeparator(Messages.getString("MEncoderVideo.8"), cc.xyw(1, 25, 15));
+ cmp = builder.addSeparator(Messages.getString("MEncoderVideo.8"), FormLayoutUtil.flip(cc.xyw(1, 25, 15), colSpec, orientation));
cmp = (JComponent) cmp.getComponent(0);
cmp.setFont(cmp.getFont().deriveFont(Font.BOLD));
- builder.addLabel(Messages.getString("MEncoderVideo.9"), cc.xy(1, 27));
+ builder.addLabel(Messages.getString("MEncoderVideo.9"), FormLayoutUtil.flip(cc.xy(1, 27), colSpec, orientation));
defaultsubs = new JTextField(configuration.getMencoderSubLanguages());
defaultsubs.addKeyListener(new KeyListener() {
@@ -513,7 +521,7 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.addLabel(Messages.getString("MEncoderVideo.94"), cc.xy(5, 27));
+ builder.addLabel(Messages.getString("MEncoderVideo.94"), FormLayoutUtil.flip(cc.xy(5, 27), colSpec, orientation));
forcedsub = new JTextField(configuration.getMencoderForcedSubLanguage());
forcedsub.addKeyListener(new KeyListener() {
@@ -531,7 +539,7 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.addLabel(Messages.getString("MEncoderVideo.95"), cc.xy(9, 27));
+ builder.addLabel(Messages.getString("MEncoderVideo.95"), FormLayoutUtil.flip(cc.xy(9, 27), colSpec, orientation));
forcedtags = new JTextField(configuration.getMencoderForcedSubTags());
forcedtags.addKeyListener(new KeyListener() {
@Override
@@ -548,10 +556,10 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.add(defaultsubs, cc.xyw(3, 27, 2));
- builder.add(forcedsub, cc.xy(7, 27));
- builder.add(forcedtags, cc.xyw(11, 27, 5));
- builder.addLabel(Messages.getString("MEncoderVideo.10"), cc.xy(1, 29));
+ builder.add(defaultsubs, FormLayoutUtil.flip(cc.xyw(3, 27, 2), colSpec, orientation));
+ builder.add(forcedsub, FormLayoutUtil.flip(cc.xy(7, 27), colSpec, orientation));
+ builder.add(forcedtags, FormLayoutUtil.flip(cc.xyw(11, 27, 5), colSpec, orientation));
+ builder.addLabel(Messages.getString("MEncoderVideo.10"), FormLayoutUtil.flip(cc.xy(1, 29), colSpec, orientation));
defaultaudiosubs = new JTextField(configuration.getMencoderAudioSubLanguages());
defaultaudiosubs.addKeyListener(new KeyListener() {
@@ -569,8 +577,8 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.add(defaultaudiosubs, cc.xyw(3, 29, 8));
- builder.addLabel(Messages.getString("MEncoderVideo.11"), cc.xy(1, 31));
+ builder.add(defaultaudiosubs, FormLayoutUtil.flip(cc.xyw(3, 29, 8), colSpec, orientation));
+ builder.addLabel(Messages.getString("MEncoderVideo.11"), FormLayoutUtil.flip(cc.xy(1, 31), colSpec, orientation));
Object data[] = new Object[]{
configuration.getMencoderSubCp(),
@@ -624,7 +632,7 @@ public void itemStateChanged(ItemEvent e) {
});
subcp.setEditable(true);
- builder.add(subcp, cc.xyw(3, 31, 7));
+ builder.add(subcp, FormLayoutUtil.flip(cc.xyw(3, 31, 7), colSpec, orientation));
fribidi = new JCheckBox(Messages.getString("MEncoderVideo.23"));
fribidi.setContentAreaFilled(false);
@@ -639,8 +647,8 @@ public void itemStateChanged(ItemEvent e) {
}
});
- builder.add(fribidi, cc.xyw(11, 31, 4));
- builder.addLabel(Messages.getString("MEncoderVideo.24"), cc.xy(1, 33));
+ builder.add(fribidi, FormLayoutUtil.flip(cc.xyw(11, 31, 4), colSpec, orientation));
+ builder.addLabel(Messages.getString("MEncoderVideo.24"), FormLayoutUtil.flip(cc.xy(1, 33), colSpec, orientation));
defaultfont = new JTextField(configuration.getMencoderFont());
defaultfont.addKeyListener(new KeyListener() {
@@ -658,7 +666,7 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.add(defaultfont, cc.xyw(3, 33, 8));
+ builder.add(defaultfont, FormLayoutUtil.flip(cc.xyw(3, 33, 8), colSpec, orientation));
JButton fontselect = new JButton("...");
fontselect.addActionListener(new ActionListener() {
@@ -674,8 +682,8 @@ public void actionPerformed(ActionEvent e) {
}
});
- builder.add(fontselect, cc.xyw(11, 33, 2));
- builder.addLabel(Messages.getString("MEncoderVideo.37"), cc.xyw(1, 35, 3));
+ builder.add(fontselect, FormLayoutUtil.flip(cc.xyw(11, 33, 2), colSpec, orientation));
+ builder.addLabel(Messages.getString("MEncoderVideo.37"), FormLayoutUtil.flip(cc.xyw(1, 35, 3), colSpec, orientation));
alternateSubFolder = new JTextField(configuration.getAlternateSubsFolder());
alternateSubFolder.addKeyListener(new KeyListener() {
@@ -693,7 +701,7 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.add(alternateSubFolder, cc.xyw(3, 35, 8));
+ builder.add(alternateSubFolder, FormLayoutUtil.flip(cc.xyw(3, 35, 8), colSpec, orientation));
JButton select = new JButton("...");
select.addActionListener(new ActionListener() {
@@ -714,8 +722,8 @@ public void actionPerformed(ActionEvent e) {
}
});
- builder.add(select, cc.xyw(11, 35, 2));
- builder.addLabel(Messages.getString("MEncoderVideo.12"), cc.xy(1, 39, CellConstraints.RIGHT, CellConstraints.CENTER));
+ builder.add(select, FormLayoutUtil.flip(cc.xyw(11, 35, 2), colSpec, orientation));
+ builder.addLabel(Messages.getString("MEncoderVideo.12"), FormLayoutUtil.flip(cc.xy(1, 39, CellConstraints.RIGHT, CellConstraints.CENTER), colSpec, orientation));
mencoder_ass_scale = new JTextField(configuration.getMencoderAssScale());
mencoder_ass_scale.addKeyListener(new KeyListener() {
@@ -733,7 +741,7 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.addLabel(Messages.getString("MEncoderVideo.13"), cc.xy(5, 39));
+ builder.addLabel(Messages.getString("MEncoderVideo.13"), FormLayoutUtil.flip(cc.xy(5, 39), colSpec, orientation));
mencoder_ass_outline = new JTextField(configuration.getMencoderAssOutline());
mencoder_ass_outline.addKeyListener(new KeyListener() {
@@ -751,7 +759,7 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.addLabel(Messages.getString("MEncoderVideo.14"), cc.xy(9, 39));
+ builder.addLabel(Messages.getString("MEncoderVideo.14"), FormLayoutUtil.flip(cc.xy(9, 39), colSpec, orientation));
mencoder_ass_shadow = new JTextField(configuration.getMencoderAssShadow());
mencoder_ass_shadow.addKeyListener(new KeyListener() {
@@ -769,7 +777,7 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.addLabel(Messages.getString("MEncoderVideo.15"), cc.xy(13, 39));
+ builder.addLabel(Messages.getString("MEncoderVideo.15"), FormLayoutUtil.flip(cc.xy(13, 39), colSpec, orientation));
mencoder_ass_margin = new JTextField(configuration.getMencoderAssMargin());
mencoder_ass_margin.addKeyListener(new KeyListener() {
@@ -787,11 +795,11 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.add(mencoder_ass_scale, cc.xy(3, 39));
- builder.add(mencoder_ass_outline, cc.xy(7, 39));
- builder.add(mencoder_ass_shadow, cc.xy(11, 39));
- builder.add(mencoder_ass_margin, cc.xy(15, 39));
- builder.addLabel(Messages.getString("MEncoderVideo.16"), cc.xy(1, 41, CellConstraints.RIGHT, CellConstraints.CENTER));
+ builder.add(mencoder_ass_scale, FormLayoutUtil.flip(cc.xy(3, 39), colSpec, orientation));
+ builder.add(mencoder_ass_outline, FormLayoutUtil.flip(cc.xy(7, 39), colSpec, orientation));
+ builder.add(mencoder_ass_shadow, FormLayoutUtil.flip(cc.xy(11, 39), colSpec, orientation));
+ builder.add(mencoder_ass_margin, FormLayoutUtil.flip(cc.xy(15, 39), colSpec, orientation));
+ builder.addLabel(Messages.getString("MEncoderVideo.16"), FormLayoutUtil.flip(cc.xy(1, 41, CellConstraints.RIGHT, CellConstraints.CENTER), colSpec, orientation));
mencoder_noass_scale = new JTextField(configuration.getMencoderNoAssScale());
mencoder_noass_scale.addKeyListener(new KeyListener() {
@@ -809,7 +817,7 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.addLabel(Messages.getString("MEncoderVideo.17"), cc.xy(5, 41));
+ builder.addLabel(Messages.getString("MEncoderVideo.17"), FormLayoutUtil.flip(cc.xy(5, 41), colSpec, orientation));
mencoder_noass_outline = new JTextField(configuration.getMencoderNoAssOutline());
mencoder_noass_outline.addKeyListener(new KeyListener() {
@@ -827,7 +835,7 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.addLabel(Messages.getString("MEncoderVideo.18"), cc.xy(9, 41));
+ builder.addLabel(Messages.getString("MEncoderVideo.18"), FormLayoutUtil.flip(cc.xy(9, 41), colSpec, orientation));
mencoder_noass_blur = new JTextField(configuration.getMencoderNoAssBlur());
mencoder_noass_blur.addKeyListener(new KeyListener() {
@@ -845,7 +853,7 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.addLabel(Messages.getString("MEncoderVideo.19"), cc.xy(13, 41));
+ builder.addLabel(Messages.getString("MEncoderVideo.19"), FormLayoutUtil.flip(cc.xy(13, 41), colSpec, orientation));
mencoder_noass_subpos = new JTextField(configuration.getMencoderNoAssSubPos());
mencoder_noass_subpos.addKeyListener(new KeyListener() {
@@ -863,10 +871,10 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.add(mencoder_noass_scale, cc.xy(3, 41));
- builder.add(mencoder_noass_outline, cc.xy(7, 41));
- builder.add(mencoder_noass_blur, cc.xy(11, 41));
- builder.add(mencoder_noass_subpos, cc.xy(15, 41));
+ builder.add(mencoder_noass_scale, FormLayoutUtil.flip(cc.xy(3, 41), colSpec, orientation));
+ builder.add(mencoder_noass_outline, FormLayoutUtil.flip(cc.xy(7, 41), colSpec, orientation));
+ builder.add(mencoder_noass_blur, FormLayoutUtil.flip(cc.xy(11, 41), colSpec, orientation));
+ builder.add(mencoder_noass_subpos, FormLayoutUtil.flip(cc.xy(15, 41), colSpec, orientation));
ass = new JCheckBox(Messages.getString("MEncoderVideo.20"));
ass.setContentAreaFilled(false);
@@ -878,7 +886,7 @@ public void itemStateChanged(ItemEvent e) {
}
});
- builder.add(ass, cc.xy(1, 37));
+ builder.add(ass, FormLayoutUtil.flip(cc.xy(1, 37), colSpec, orientation));
ass.setSelected(configuration.isMencoderAss());
ass.getItemListeners()[0].itemStateChanged(null);
@@ -890,7 +898,7 @@ public void itemStateChanged(ItemEvent e) {
}
});
- builder.add(fc, cc.xyw(3, 37, 5));
+ builder.add(fc, FormLayoutUtil.flip(cc.xyw(3, 37, 5), colSpec, orientation));
fc.setSelected(configuration.isMencoderFontConfig());
assdefaultstyle = new JCheckBox(Messages.getString("MEncoderVideo.36"));
@@ -901,7 +909,7 @@ public void itemStateChanged(ItemEvent e) {
}
});
- builder.add(assdefaultstyle, cc.xyw(8, 37, 4));
+ builder.add(assdefaultstyle, FormLayoutUtil.flip(cc.xyw(8, 37, 4), colSpec, orientation));
assdefaultstyle.setSelected(configuration.isMencoderAssDefaultStyle());
subs = new JCheckBox(Messages.getString("MEncoderVideo.22"));
@@ -917,8 +925,8 @@ public void itemStateChanged(ItemEvent e) {
}
});
- builder.add(subs, cc.xyw(1, 43, 15));
- builder.addLabel(Messages.getString("MEncoderVideo.92"), cc.xy(1, 45));
+ builder.add(subs, FormLayoutUtil.flip(cc.xyw(1, 43, 15), colSpec, orientation));
+ builder.addLabel(Messages.getString("MEncoderVideo.92"), FormLayoutUtil.flip(cc.xy(1, 45), colSpec, orientation));
subq = new JTextField(configuration.getMencoderVobsubSubtitleQuality());
subq.addKeyListener(new KeyListener() {
@@ -936,9 +944,9 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.add(subq, cc.xyw(3, 45, 1));
- builder.addLabel(Messages.getString("MEncoderVideo.93"), cc.xyw(1, 47, 6));
- builder.addLabel(Messages.getString("MEncoderVideo.28") + "% ", cc.xy(1, 49, CellConstraints.RIGHT, CellConstraints.CENTER));
+ builder.add(subq, FormLayoutUtil.flip(cc.xyw(3, 45, 1), colSpec, orientation));
+ builder.addLabel(Messages.getString("MEncoderVideo.93"), FormLayoutUtil.flip(cc.xyw(1, 47, 6), colSpec, orientation));
+ builder.addLabel(Messages.getString("MEncoderVideo.28") + "% ", FormLayoutUtil.flip(cc.xy(1, 49, CellConstraints.RIGHT, CellConstraints.CENTER), colSpec, orientation));
ocw = new JTextField(configuration.getMencoderOverscanCompensationWidth());
ocw.addKeyListener(new KeyListener() {
@@ -956,8 +964,8 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.add(ocw, cc.xyw(3, 49, 1));
- builder.addLabel(Messages.getString("MEncoderVideo.30") + "% ", cc.xy(5, 49));
+ builder.add(ocw, FormLayoutUtil.flip(cc.xyw(3, 49, 1), colSpec, orientation));
+ builder.addLabel(Messages.getString("MEncoderVideo.30") + "% ", FormLayoutUtil.flip(cc.xy(5, 49), colSpec, orientation));
och = new JTextField(configuration.getMencoderOverscanCompensationHeight());
och.addKeyListener(new KeyListener() {
@@ -975,7 +983,7 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.add(och, cc.xyw(7, 49, 1));
+ builder.add(och, FormLayoutUtil.flip(cc.xyw(7, 49, 1), colSpec, orientation));
subColor = new JButton();
subColor.setText(Messages.getString("MEncoderVideo.31"));
@@ -996,7 +1004,7 @@ public void actionPerformed(ActionEvent e) {
}
});
- builder.add(subColor, cc.xyw(12, 37, 4));
+ builder.add(subColor, FormLayoutUtil.flip(cc.xyw(12, 37, 4), colSpec, orientation));
JCheckBox disableSubs = ((LooksFrame) PMS.get().getFrame()).getTr().getDisableSubs();
disableSubs.addItemListener(new ItemListener() {
@@ -1030,7 +1038,12 @@ public void itemStateChanged(ItemEvent e) {
disableSubs.setSelected(true);
}
- return builder.getPanel();
+ JPanel panel = builder.getPanel();
+
+ // Apply the orientation to the panel and all components in it
+ panel.applyComponentOrientation(orientation);
+
+ return panel;
}
@Override
View
29 src/main/java/net/pms/encoders/TSMuxerVideo.java
@@ -18,15 +18,18 @@
*/
package net.pms.encoders;
+import java.awt.ComponentOrientation;
import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
+import java.util.Locale;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
+import javax.swing.JPanel;
import net.pms.configuration.PmsConfiguration;
import net.pms.configuration.RendererConfiguration;
@@ -44,6 +47,7 @@
import net.pms.Messages;
import net.pms.PMS;
import net.pms.util.CodecUtil;
+import net.pms.util.FormLayoutUtil;
import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.factories.Borders;
@@ -55,6 +59,9 @@
public class TSMuxerVideo extends Player {
private static final Logger logger = LoggerFactory.getLogger(TSMuxerVideo.class);
+ private static final String COL_SPEC = "left:pref, 0:grow";
+ private static final String ROW_SPEC = "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, 0:grow";
+
public static final String ID = "tsmuxer";
private PmsConfiguration configuration;
@@ -543,17 +550,20 @@ public int type() {
@Override
public JComponent config() {
- FormLayout layout = new FormLayout(
- "left:pref, 0:grow",
- "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, 0:grow");
+ // Apply the orientation for the locale
+ Locale locale = new Locale(configuration.getLanguage());
+ ComponentOrientation orientation = ComponentOrientation.getOrientation(locale);
+ String colSpec = FormLayoutUtil.getColSpec(COL_SPEC, orientation);
+ FormLayout layout = new FormLayout(colSpec, ROW_SPEC);
+
PanelBuilder builder = new PanelBuilder(layout);
builder.setBorder(Borders.EMPTY_BORDER);
builder.setOpaque(false);
CellConstraints cc = new CellConstraints();
- JComponent cmp = builder.addSeparator(Messages.getString("TSMuxerVideo.3"), cc.xyw(2, 1, 1));
+ JComponent cmp = builder.addSeparator(Messages.getString("TSMuxerVideo.3"), FormLayoutUtil.flip(cc.xyw(2, 1, 1), colSpec, orientation));
cmp = (JComponent) cmp.getComponent(0);
cmp.setFont(cmp.getFont().deriveFont(Font.BOLD));
@@ -567,7 +577,7 @@ public void itemStateChanged(ItemEvent e) {
configuration.setTsmuxerForceFps(e.getStateChange() == ItemEvent.SELECTED);
}
});
- builder.add(tsmuxerforcefps, cc.xy(2, 3));
+ builder.add(tsmuxerforcefps, FormLayoutUtil.flip(cc.xy(2, 3), colSpec, orientation));
muxallaudiotracks = new JCheckBox(Messages.getString("TSMuxerVideo.19"));
muxallaudiotracks.setContentAreaFilled(false);
@@ -580,9 +590,14 @@ public void itemStateChanged(ItemEvent e) {
configuration.setMuxAllAudioTracks(e.getStateChange() == ItemEvent.SELECTED);
}
});
- builder.add(muxallaudiotracks, cc.xy(2, 5));
+ builder.add(muxallaudiotracks, FormLayoutUtil.flip(cc.xy(2, 5), colSpec, orientation));
+
+ JPanel panel = builder.getPanel();
+
+ // Apply the orientation to the panel and all components in it
+ panel.applyComponentOrientation(orientation);
- return builder.getPanel();
+ return panel;
}
public boolean isInternalSubtitlesSupported() {
View
295 src/main/java/net/pms/messages_ar.properties
@@ -0,0 +1,295 @@
+#
+# This file was automatically translated with Google Translate (http://translate.google.com/#en|ar)
+# as a proof of concept for right-to-left oriented language support in PMS.
+#
+# A proper translation still needs to be done.
+#
+DLNAMediaDatabase.0=\u0642\u0627\u0639\u062F\u0629 \u0628\u064A\u0627\u0646\u0627\u062A \u0630\u0627\u0643\u0631\u0629 \u0627\u0644\u062A\u062E\u0632\u064A\u0646 \u0627\u0644\u0645\u0624\u0642\u062A \u064A\u062D\u062A\u0627\u062C \u0625\u0644\u0649 \u064A\u0643\u0648\u0646 reinitialized.\n \u0646 \u0646\u0623\u0633\u0641 \u0644\u0644\ \u0625\u0632\u0639\u0627\u062C!
+DLNAMediaDatabase.1=A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z
+DLNAMediaDatabase.2=\u062A\u0646\u0638\u064A\u0641 \u0642\u0627\u0639\u062F\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A ...
+DLNAMediaDatabase.3=\u0636\u063A\u0637 \u0642\u0627\u0639\u062F\u0629 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A ...
+DLNAMediaDatabase.4=\u0645\u0633\u062D \u0627\u0644\u0645\u062C\u0644\u062F:
+FFMpegDVRMSRemux.0=\u0627\u0644\u0628\u062F\u064A\u0644 FFmpeg \u0645\u0633\u0627\u0631:
+FFMpegDVRMSRemux.1=\u0636\u0628\u0637 DVR-MS remuxing
+FFMpegVideo.0=\u0636\u0628\u0637 \u062A\u0631\u0645\u064A\u0632 \u0644\u0627\u0641\u064A\u0633\u064A\u0646\u062B / FFMPEG \u0645\u062D\u0631\u0643 \u0641\u0642\u0637 (\u064A\u0641\u0636\u0644 \u0627\u0641\u064A\u0633\u064A\u0646\u062B / \u0645\u064A\u0646\u0643\u0648\u062F\u0631)
+FoldTab.0=<\u0643\u0644 \u0627\u0644\u0645\u0634\u063A\u0644\u0627\u062A>
+FoldTab.1=\u062E\u064A\u0627\u0631\u0627\u062A \u0627\u0644\u0645\u0634\u0627\u0631\u0643\u0629
+FoldTab.2=\u062A\u0641\u062D\u0635 \u062C\u0645\u064A\u0639 \u0627\u0644\u0645\u062C\u0644\u062F\u0627\u062A \u0627\u0644\u0645\u0634\u062A\u0631\u0643\u0629
+FoldTab.3=\u0648\u064A\u0645\u0643\u0646 \u0645\u0633\u062D \u0643\u0644 \u0627\u0644\u0645\u062C\u0644\u062F\u0627\u062A \u0627\u0644\u0645\u0634\u062A\u0631\u0643\u0629 \u062A\u0623\u062E\u0630 \u0627\u0644\u0643\u062B\u064A\u0631 \u0645\u0646 \u0627\u0644\u0648\u0642\u062A\!\n
+FoldTab.4=\u0647\u0644 \u0623\u0646\u062A \u0645\u062A\u0623\u0643\u062F \u0644\u0625\u0637\u0644\u0627\u0642 \u0627\u0644\u0645\u0633\u062D\u061F\n\n
+FoldTab.5=\u0625\u062E\u0641\u0627\u0621 \u0645\u0644\u062D\u0642\u0627\u062A \u0627\u0644\u0645\u0644\u0641\u0627\u062A
+FoldTab.6=\u0627\u062E\u0641\u0627\u0621 \u0627\u0644\u0641\u064A\u062F\u064A\u0648 \u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0645\u062C\u0644\u062F
+FoldTab.7=\u0627\u0644\u0645\u062C\u0644\u062F\u0627\u062A \u0627\u0644\u0645\u0634\u062A\u0631\u0643\u0629
+FoldTab.8=\u0625\u062E\u0641\u0627\u0621 \u0623\u0633\u0645\u0627\u0621 \u062A\u0631\u0627\u0646\u0633\u0643\u0648\u062F\u064A\u0646\u063A \u0645\u062D\u0631\u0643
+FoldTab.9=\u0625\u0636\u0627\u0641\u0629 \u062F\u0644\u064A\u0644
+FoldTab.10=\u0647\u0644 \u062A\u0631\u063A\u0628 \u0641\u064A \u0627\u0644\u062A\u0648\u0642\u0641 \u0639\u0646 \u0627\u0644\u0641\u062D\u0635\u061F\n\n
+FoldTab.11=\u062A\u0645\u0643\u064A\u0646 \u0627\u0644\u0645\u062D\u0648\u0644\u0629 \u0646\u0633\u062E\u0629 \u0627\u0644\u0641\u064A\u062F\u064A\u0648 \u0639\u0644\u0649 PS3 (\u0627\u0644\u062F\u0642\u064A\u0642\u060C \u0648\u0645\u0644\u0641\u0627\u062A \u0644\u064A\u0633 \u0644\u0647\u0627 \u062D\u062C\u0645 \u062B\u0627\u0628\u062A!)
+FoldTab.12=\u0641\u0631\u0632 \u0627\u0644\u0645\u062C\u0644\u062F\u0627\u062A \u0627\u0644\u0645\u0634\u062A\u0631\u0643\u0629
+FoldTab.13=\u0627\u0644\u0635\u0648\u0631 \u0627\u0644\u0645\u0635\u063A\u0631\u0629
+FoldTab.14=\u0627\u0633\u062A\u062E\u062F\u0645 \u0625\u0645\u0628\u0644\u0627\u064A\u0631 \u0644\u0644\u0645\u0635\u063A\u0631\u0627\u062A \u0627\u0644\u0641\u064A\u062F\u064A\u0648
+FoldTab.15=\u0627\u0644\u0623\u0628\u062C\u062F\u064A (A-Z)
+FoldTab.16=\u062D\u0633\u0628 \u0627\u0644\u062A\u0627\u0631\u064A\u062E\u060C \u0627\u0644\u0623\u062D\u062F\u062B \u0623\u0648\u0644\u0627
+FoldTab.17=\u062D\u0633\u0628 \u0627\u0644\u062A\u0627\u0631\u064A\u062E\u060C \u0627\u0644\u0623\u0642\u062F\u0645 \u0623\u0648\u0644\u0627
+FoldTab.18=\u0645\u0644\u0641 \u0627\u0644\u0646\u0638\u0627\u0645:
+FoldTab.19=\u062F\u064A \u0641\u064A \u062F\u064A \u0627\u064A\u0632\u0648 \u0627\u0644\u0635\u0648\u0631 \u0627\u0644\u0645\u0635\u063A\u0631\u0629
+FoldTab.20=ASCIIbetical
+FoldTab.21=\u0635\u0648\u0631\u0629 \u0645\u0635\u063A\u0631\u0629
+FoldTab.22=\u0623\u0628\u062C\u062F\u064A\u0629
+FoldTab.23=\u062A\u062D\u0645\u064A\u0644 \u0645\u0646 amazon.com
+FoldTab.24=\u062A\u062D\u0645\u064A\u0644 \u0645\u0646 discogs.com
+FoldTab.26=\u0627\u0644\u0635\u0648\u0631 \u0627\u0644\u0645\u0635\u063A\u0631\u0629 \u0639\u0631\u0636 \u0627\u0644\u0635\u0648\u062A:
+FoldTab.27=\u0627\u0644\u0628\u062F\u064A\u0644 \u062A\u063A\u0637\u064A\u0629 \u0627\u0644\u0641\u0646 \u0641\u064A\u062F\u064A\u0648 \u0627\u0644\u0645\u062C\u0644\u062F
+FoldTab.28=\u0627\u062E\u062A\u064A\u0627\u0631 \u0645\u062C\u0644\u062F
+FoldTab.29=\u0625\u0638\u0647\u0627\u0631 \u0645\u0643\u062A\u0628\u0629 iPhoto
+FoldTab.30=\u0639\u0631\u0636 \u0627\u064A \u062A\u064A\u0648\u0646\u0632 \u0645\u0643\u062A\u0628\u0629
+FoldTab.31=\u0625\u062E\u0641\u0627\u0621 \u0627\u0644\u0645\u062C\u0644\u062F\u0627\u062A \u0641\u0627\u0631\u063A\u0629 / \u063A\u064A\u0631 \u0633\u0627\u0626\u0644 \u0627\u0644\u0625\u0639\u0644\u0627\u0645 (\u062D\u0630\u0631\u0627: \u0627\u0644\u062A\u0635\u0641\u062D \u0628\u0637\u064A\u0621)
+FoldTab.32=\u0625\u062E\u0641\u0627\u0621 \u0627\u0644\u0645\u062C\u0644\u062F \u0627\u0644\u0645\u0624\u0642\u062A
+FoldTab.33=\u0625\u062E\u0641\u0627\u0621 \u0627\u0644\u0645\u062C\u0644\u062F\u0627\u062A \u0641\u064A\u0631\u062A
+FoldTab.34=\u062A\u0638\u0647\u0631 \u0641\u062A\u062D\u0629 \u0645\u0643\u062A\u0628\u0629
+FontFileFilter.3=\u062E\u0637\u0648\u0637 \u062A\u0631\u0648\u062A\u0627\u064A\u0628
+LinksTab.5=\u0631\u0648\u0627\u0628\u0637 \u0645\u0641\u064A\u062F\u0629:
+LinksTab.6=\u0628\u0646\u0627\u0621:
+LooksFrame.5=\u0627\u0633\u062A\u0642\u0627\u0644
+LooksFrame.6=\u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629 \u0644\u0648\u062D\u0629
+LooksFrame.9=\u062D\u0641\u0638
+LooksFrame.12=\u0625\u0639\u0627\u062F\u0629 \u062A\u0634\u063A\u064A\u0644 \u0627\u0644\u062E\u0627\u062F\u0645
+LooksFrame.13=\u0627\u0644\u062E\u0627\u062F\u0645 \u0644\u0627\u0628\u062F \u0645\u0646 \u0625\u0639\u0627\u062F\u0629 \u062A\u0634\u063A\u064A\u0644 \u0628\u0633\u0628\u0628 \u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u062A\u0643\u0648\u064A\u0646
+LooksFrame.18=\u062D\u0627\u0644\u0629
+LooksFrame.19=\u0622\u062B\u0627\u0631
+LooksFrame.20=\u062A\u0643\u0648\u064A\u0646 \u0639\u0627\u0645
+LooksFrame.21=\u062A\u0631\u0627\u0646\u0633\u0643\u0648\u062F\u064A\u0646\u063A \u0625\u0639\u062F\u0627\u062F\u0627\u062A
+LooksFrame.22=\u0627\u0644\u0645\u0644\u0627\u062D\u0629 / \u062D\u0635\u0629 \u0625\u0639\u062F\u0627\u062F\u0627\u062A
+LooksFrame.24=\u0645\u0633\u0627\u0639\u062F\u0629
+LooksFrame.25=\u062D\u0648\u0644
+LooksFrame.26=\u0627\u0644\u0627\u062E\u062A\u0628\u0627\u0631 \u0641\u0642\u0637\u060C \u0645\u0646 \u0627\u0644\u0645\u062D\u062A\u0645\u0644 \u063A\u064A\u0631 \u0645\u0633\u062A\u0642\u0631\u0629
+MEncoderAviSynth.2=\u0636\u0628\u0637 \u062A\u0631\u0645\u064A\u0632 \u0627\u0644\u0641\u064A\u062F\u064A\u0648 \u0644\u0645\u062D\u0631\u0643 \u0627\u0641\u064A\u0633\u064A\u0646\u062B \u0641\u0642\u0637
+MEncoderAviSynth.3=\u062A\u0645\u0643\u064A\u0646 \u0627\u0641\u064A\u0633\u064A\u0646\u062B \u062A\u063A\u064A\u064A\u0631 \u0641\u0631\u0627\u0645\u064A\u0631\u0627\u062A\u064A \u0627\u0644\u0645\u062A\u063A\u064A\u0631 \u0641\u064A \u0641\u0631\u0627\u0645\u064A\u0631\u0627\u062A\u064A \u062B\u0627\u0628\u062A (convertfps = \u0635\u062D\u064A\u062D)
+MEncoderAviSynth.4=#AviSynth script is now fully customisable !\n
+MEncoderAviSynth.5=#You must use the following variables (\"clip\" being the avisynth variable of the movie):\n
+MEncoderAviSynth.6=#<movie>: insert the complete DirectShowSource instruction [ clip=DirectShowSource(movie, convertfps) ]\n
+MEncoderAviSynth.7=#<sub>: insert the complete TextSub/VobSub instruction if there's any detected srt/sub/idx/ass subtitle file\n
+MEncoderAviSynth.8=#<moviefilename>: variable of the movie filename, if you want to do all this by yourself\n
+MEncoderAviSynth.9=#Be careful, the custom script MUST return the clip object\n
+MEncoderAviSynth.10=<\u0641\u064A\u0644\u0645>\n
+MEncoderAviSynth.11=<\u0639\u0646\u0648\u0627\u0646 \u0641\u0631\u0639\u064A>\n
+MEncoderAviSynth.12=\u0639\u0648\u062F\u0629 \u0643\u0644\u064A\u0628
+MEncoderVideo.0=\u062A\u062E\u0637\u064A \u0641\u0644\u062A\u0631 \u0644\u0625\u0632\u0627\u0644\u0629 \u0643\u062A\u0644 \u062D\u0644\u0642\u0629 H264. \u064A\u0645\u0643\u0646 \u0623\u0646 \u062A\u062A\u062D\u0644\u0644 \u062C\u0648\u062F\u0629.
+MEncoderVideo.1=\u0627\u0644\u0641\u064A\u062F\u064A\u0648 / \u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0635\u0648\u062A \u0644\u0641\u0643 \u0645\u062D\u0631\u0643 \u0645\u064A\u0646\u0643\u0648\u062F\u0631 \u0641\u0642\u0637
+MEncoderVideo.2=A / V \u0637\u0631\u064A\u0642\u0629 \u0628\u062F\u064A\u0644\u0629 \u0645\u062A\u0632\u0627\u0645\u0646\u0629
+MEncoderVideo.3=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0645\u0639\u0644\u0645\u0627\u062A \u062A\u0637\u0628\u064A\u0642 \u0627\u0644\u062A\u0631\u0645\u064A\u0632 \u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u064A (\u0645\u0633\u062A\u062D\u0633\u0646!)
+MEncoderVideo.4=\u0641\u0631\u0636 \u0641\u0631\u0627\u0645\u064A\u0631\u0627\u062A\u064A \u062A\u062D\u0644\u064A\u0644 \u0645\u0646 FFMPEG
+MEncoderVideo.5=\u064A\u0645\u0643\u0646\u0643 \u0625\u0636\u0627\u0641\u0629 \u0647\u0646\u0627 \u062E\u064A\u0627\u0631\u0627\u062A \u0645\u062D\u062F\u062F\u0629\u060C \u0645\u062B\u0644 \u0645\u0631\u0634\u062D denoise \u0639\u0644\u0649 \u0633\u0628\u064A\u0644 \u0627\u0644\u0645\u062B\u0627\u0644: -vf hqdn3d
+MEncoderVideo.6=\u0639\u0631\u0641 \u062E\u064A\u0627\u0631\u0627\u062A:
+MEncoderVideo.7=\u0627\u0644\u0635\u0648\u062A \u0644\u063A\u0629 \u0630\u0627\u062A \u0627\u0644\u0623\u0648\u0644\u0648\u064A\u0629:
+MEncoderVideo.8=\u062A\u0631\u062C\u0645\u0629 \u0625\u0639\u062F\u0627\u062F\u0627\u062A
+MEncoderVideo.9=\u062A\u0631\u062C\u0645\u0629 \u0644\u063A\u0629 \u0630\u0627\u062A \u0627\u0644\u0623\u0648\u0644\u0648\u064A\u0629:
+MEncoderVideo.10=\u0627\u0644\u0635\u0648\u062A \u0644\u063A\u0629 \u0627\u0644\u062A\u0631\u062C\u0645\u0629 / \u0627\u0644\u0623\u0648\u0644\u0648\u064A\u0629 (\u0639\u0644\u0649 \u0633\u0628\u064A\u0644 \u0627\u0644\u0645\u062B\u0627\u0644: \u0627\u0646\u060C \u062D\u0627\u0644\u0627\u060C \u0627\u0644\u064A\u0627\u0628\u0627\u0646\u060C \u0627\u0646\u0643\u0644\u062A\u0631\u0627)
+MEncoderVideo.11=\u062A\u0631\u062C\u0645\u0629 \u0645\u062E\u0637\u0637 \u0627\u0644\u0634\u0641\u0631\u0629:
+MEncoderVideo.12=\u062A\u062C\u0627\u0648\u0632 \u0639\u0644\u0649 \u063A\u0631\u0627\u0631 \u062A\u0631\u062C\u0645\u0629: \u0636\u0628\u0637 \u062D\u062C\u0645 \u0627\u0644\u062E\u0637
+MEncoderVideo.13=\u0627\u0644\u062E\u0637 \u0627\u0644\u0645\u062E\u0637\u0637 \u0627\u0644\u062A\u0641\u0635\u064A\u0644\u064A
+MEncoderVideo.14=\u0627\u0644\u062E\u0637 \u0627\u0644\u0638\u0644
+MEncoderVideo.15=\u0634\u0628\u0647 \u0647\u0627\u0645\u0634 (\u0645\u0642\u0635\u0641)
+MEncoderVideo.16=\u0645\u0634\u0641\u0631 \u062A\u0631\u062C\u0645\u0629: \u0636\u0628\u0637 \u062D\u062C\u0645 \u0627\u0644\u062E\u0637
+MEncoderVideo.17=\u0627\u0644\u062E\u0637 \u0627\u0644\u0645\u062E\u0637\u0637 \u0627\u0644\u062A\u0641\u0635\u064A\u0644\u064A
+MEncoderVideo.18=\u0627\u0644\u062E\u0637 \u0637\u0645\u0633
+MEncoderVideo.19=\u0634\u0628\u0647 \u0647\u0627\u0645\u0634 (\u066A)
+MEncoderVideo.20=\u0627\u0633\u062A\u062E\u062F\u0645 ASS / SSA \u0627\u0644\u062A\u0635\u0645\u064A\u0645 \u0627\u0644\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0641\u0631\u0639\u064A
+MEncoderVideo.21=Fontconfig / \u062C\u0632\u0621\u0627 \u0644\u0627 \u064A\u062A\u062C\u0632\u0623 \u0645\u0646 \u0627\u0644\u062E\u0637\u0648\u0637
+MEncoderVideo.22=* \u062A\u062D\u0645\u064A\u0644 \u062A\u0644\u0642\u0627\u0626\u064A\u0627. SRT / *. \u062A\u0631\u062C\u0645\u0629 \u0627\u0644\u0641\u0631\u0639\u064A\u0629 \u0645\u0639 \u0646\u0641\u0633 \u0627\u0633\u0645 \u0627\u0644\u0645\u0644\u0641
+MEncoderVideo.23=FriBiDi \u0648\u0636\u0639
+MEncoderVideo.24=\u062A\u062D\u062F\u064A\u062F \u062E\u0637 \u062A\u0631\u0648\u062A\u0627\u064A\u0628 (\u0644\u062A\u0631\u062C\u0645\u0629):
+MEncoderVideo.25=\u062A\u062D\u062F\u064A\u062F \u062E\u0637 \u062A\u0631\u0648\u062A\u0627\u064A\u0628
+MEncoderVideo.26=\u062A\u0634\u0627\u0628\u0643 \u0641\u0644\u062A\u0631
+MEncoderVideo.27=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0627\u0644\u0641\u064A\u062F\u064A\u0648 \u0627\u0644\u0645\u062A\u0633\u0644\u0642
+MEncoderVideo.28=\u0639\u0631\u0636
+MEncoderVideo.29=\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u062E\u0628\u0631\u0627\u0621: \u062A\u0631\u0645\u064A\u0632 \u0645\u062D\u062F\u062F\u0629 \u0627\u0644\u0645\u0639\u0644\u0645\u0627\u062A
+MEncoderVideo.30=\u0627\u0631\u062A\u0641\u0627\u0639
+MEncoderVideo.31=\u0627\u0644\u063A\u0648\u0627\u0635\u0627\u062A \u0627\u0644\u0644\u0648\u0646
+MEncoderVideo.32=Remux \u0639\u0646\u062F\u0645\u0627 \u0627\u0644\u0635\u0648\u062A \u0647\u0648 AC3 (\u0623\u064A \u0625\u0639\u0627\u062F\u0629 \u062A\u0631\u0645\u064A\u0632)
+MEncoderVideo.33=\u0639\u0631\u0641 \u0627\u0644\u0645\u0639\u0644\u0645\u0627\u062A:
+MEncoderVideo.34=\u062A\u0639\u062F\u064A\u0644 \u0627\u0644\u062A\u0631\u0645\u064A\u0632 \u0627\u0644\u0645\u0639\u0644\u0645\u0627\u062A \u0645\u062D\u062F\u062F\u0629
+MEncoderVideo.35=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0648\u062D\u062F\u0629 \u0627\u0644\u0645\u0639\u0627\u0644\u062C\u0629 \u0627\u0644\u0645\u0631\u0643\u0632\u064A\u0629 \u0645\u062A\u0639\u062F\u062F\u0629 \u0627\u0644\u0646\u0648\u0649
+MEncoderVideo.36=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0623\u0633\u0644\u0648\u0628 \u062C\u0632\u0621\u0627 \u0644\u0627 \u064A\u062A\u062C\u0632\u0623 \u0645\u0646
+MEncoderVideo.37=\u0627\u0644\u0628\u062F\u064A\u0644 \u062A\u0631\u062C\u0645\u0627\u062A \u0645\u062C\u0644\u062F
+MEncoderVideo.38=Remux \u0627\u0644\u0641\u064A\u062F\u064A\u0648 \u0645\u0639 tsMuxeR \u0639\u0646\u062F\u0645\u0627 \u064A\u0643\u0648\u0646 \u0630\u0644\u0643 \u0645\u0645\u0643\u0646\u0627\u060C \u0628\u062F\u0644\u0627 \u0645\u0646 \u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0634\u0641\u0631\u0629
+MEncoderVideo.39=Remux \u0641\u064A\u062F\u064A\u0648 \u062F\u064A \u0641\u064A \u062F\u064A \u0627\u064A\u0632\u0648 \u0627\u0644\u0645\u0633\u0627\u0631 (\u0623\u064A \u0625\u0639\u0627\u062F\u0629 \u062A\u0631\u0645\u064A\u0632)
+MEncoderVideo.68=\#Here you can put specific parameters for some codec combinations.\n
+MEncoderVideo.69=\#It's mostly for A/V synchronization issues, but it can be used for anything else as well\n
+MEncoderVideo.70=\#Consider it like expert settings as this shouldn't be used if you don't know exactly what you're doing\n
+MEncoderVideo.71=\#Syntax is {java condition} :: {MEncoder options} ; You can cumulate several options\n
+MEncoderVideo.72=\#Tokens authorized: filename srtfile container vcodec acodec samplerate framerate width height channels duration\n
+MEncoderVideo.73=\#Careful, any malformed line will be wiped out\n
+MEncoderVideo.75=\#Special options:\n
+MEncoderVideo.76=\# -noass: definitely disable ASS/SSA subtitles as they can mess up A/V sync\n
+MEncoderVideo.77=\# -nosync: definitely disable A/V sync alternative method for this condition (-mc will do the same)\n
+MEncoderVideo.78=\# -quality: override video quality settings\n
+MEncoderVideo.79=\# -mt: force usage of the multithreaded MEncoder build\n
+MEncoderVideo.80=\#This list will improve with time: tweaks/feedbacks on various codecs/files are always welcome\n
+MEncoderVideo.87=\#You can now put your own conditions/options ! Here some examples: for example, to enable the mt build of MEncoder\n
+MEncoderVideo.88=\#for any H264 HD content (redundant with the main option): vcodec == h264 && width >= 1280 :: -mt -lavdopts fast\n
+MEncoderVideo.89=\#to remove 24p judder on a 50hz TV: framerate == 23.976 :: -speed 1.042709376 -ofps 25\n
+MEncoderVideo.91=\#to remux when video is MPEG-2 and there's no subtitles: vcodec == mpeg2 && srtfile == null :: -ovc copy -nosync
+MEncoderVideo.92=\u062F\u064A \u0641\u064A \u062F\u064A / VOBsub \u062C\u0648\u062F\u0629 \u0627\u0644\u062A\u0631\u062C\u0645\u0629 (0-4) (\u0623\u0639\u0644\u0649 \u0647\u064A \u0623\u062D\u0633\u0646):
+MEncoderVideo.93=\u0625\u0636\u0627\u0641\u0629 \u062D\u062F\u0648\u062F \u0644\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u062A\u0639\u0648\u064A\u0636 overscan:
+MEncoderVideo.94=\u0627\u0636\u0637\u0631 \u0641\u0631\u0639\u064A\u0629 \u0647\u064A:
+MEncoderVideo.95=\u0623\u062C\u0628\u0631 \u0628\u0647:
+MEncoderVideo.96=cp1250 /* Windows - Eastern Europe */
+MEncoderVideo.97=cp1251 /* Windows - Cyrillic */
+MEncoderVideo.98=cp1252 /* Windows - Western Europe */
+MEncoderVideo.99=cp1253 /* Windows - Greek */
+MEncoderVideo.100=cp1254 /* Windows - Turkish */
+MEncoderVideo.101=cp1255 /* Windows - Hebrew */
+MEncoderVideo.102=cp1256 /* Windows - Arabic */
+MEncoderVideo.103=cp1257 /* Windows - Baltic */
+MEncoderVideo.104=cp1258 /* Windows - Vietnamese */
+MEncoderVideo.105=ISO-8859-1 /* Western Europe */
+MEncoderVideo.106=ISO-8859-2 /* Western and Central Europe */
+MEncoderVideo.107=ISO-8859-3 /* Western Europe and South European */
+MEncoderVideo.108=ISO-8859-4 /* Western Europe and Baltic countries */
+MEncoderVideo.109=ISO-8859-5 /* Cyrillic alphabet */
+MEncoderVideo.110=ISO-8859-6 /* Arabic */
+MEncoderVideo.111=ISO-8859-7 /* Greek */
+MEncoderVideo.112=ISO-8859-8 /* Hebrew */
+MEncoderVideo.113=ISO-8859-9 /* Western Europe with amended Turkish */
+MEncoderVideo.114=ISO-8859-10 /* Western Europe with Nordic languages */
+MEncoderVideo.115=ISO-8859-11 /* Thai */
+MEncoderVideo.116=ISO-8859-13 /* Baltic languages plus Polish */
+MEncoderVideo.117=ISO-8859-14 /* Celtic languages */
+MEncoderVideo.118=ISO-8859-15 /* Added the Euro sign */
+MEncoderVideo.119=ISO-8859-16 /* Central European languages */
+MEncoderVideo.120=cp932 /* Japanese */
+MEncoderVideo.121=cp936 /* Chinese */
+MEncoderVideo.122=cp949 /* Korean */
+MEncoderVideo.123=cp950 /* Big5, Taiwanese, Cantonese */
+MEncoderVideo.124=UTF-8 /* Unicode */
+MEncoderVideo.125=Choose Subtitles Color
+NetworkTab.0=\u0644\u063A\u0629 [\u064A\u062C\u0628 \u062A\u0637\u0628\u064A\u0642 \u0625\u0639\u0627\u062F\u0629 \u062A\u0634\u063A\u064A\u0644]:
+NetworkTab.1=\u062A\u0635\u0641\u062D \u0627\u0644\u0645\u062D\u0641\u0648\u0638\u0627\u062A \u0627\u0644\u0645\u0636\u063A\u0648\u0637\u0629 (.rar / .zip / .cbr)
+NetworkTab.2=\u062A\u0648\u0644\u064A\u062F \u0627\u0644\u0635\u0648\u0631 \u0627\u0644\u0645\u0635\u063A\u0631\u0629
+NetworkTab.3=\u0628\u062F\u0621 \u0645\u0635\u063A\u0631
+NetworkTab.4=\u062A\u062B\u0628\u064A\u062A \u0628\u0627\u0639\u062A\u0628\u0627\u0631\u0647\u0627 \u062E\u062F\u0645\u0629 \u0648\u064A\u0646\u062F\u0648\u0632
+NetworkTab.5=\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0639\u0627\u0645\u0629
+NetworkTab.6=\u0641\u064A\u0631\u062A \u062D\u062C\u0645 \u0627\u0644\u0645\u062E\u0632\u0646 \u0627\u0644\u0645\u0624\u0642\u062A \u0627\u0644\u0623\u0642\u0635\u0649\u060C \u0641\u064A \u0645\u064A\u063A\u0627 \u0628\u0627\u064A\u062A (\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649: MAX_BUFFER_SIZE):
+NetworkTab.7=\u0639\u062F\u062F \u0627\u0644\u0646\u0648\u0649 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645\u0629 \u0644\u0646\u0642\u0644 \u0627\u0644\u062A\u0631\u0645\u064A\u0632: (\u064A\u0628\u062F\u0648 \u0623\u0646 \u0644\u062F\u064A\u0643
+NetworkTab.8=\u0627\u0644\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u062A\u062D\u062F\u064A\u062B\u0627\u062A
+NetworkTab.9=\u062A\u062D\u0642\u0642 \u062A\u0644\u0642\u0627\u0626\u064A\u0627
+NetworkTab.11=\u0643\u0646\u062A \u0642\u062F \u0642\u0645\u062A \u0628\u062A\u062B\u0628\u064A\u062A \u062E\u062F\u0645\u0629 Windows \! \u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645\u0647\u060C \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0647\u0630\u0627 \u0627\u0644\u062A\u0637\u0628\u064A\u0642\u060C \u0627\u0633\u062A\u0642\u0627\u0644\u060C \ \u0646
+NetworkTab.12=\u062B\u0645 \u062A\u0628\u062F\u0623 (\u0648\u062A\u0643\u0648\u064A\u0646) \u0644\u062E\u062F\u0645\u0629 \u0648\u064A\u0646\u062F\u0648\u0632 \u0645\u0646 \u0644\u0648\u062D\u0629 \u0627\u0644\u0625\u062F\u0627\u0631\u0629. \ \u0646 \ \u0646
+NetworkTab.13=\u0648\u0633\u0648\u0641 \u064A\u0643\u0648\u0646 reinitialized \u0639\u0644\u0649 \u0645\u062E\u0628\u0623 \! \n
+NetworkTab.14=\u062E\u0637\u0623 \u0641\u064A \u062A\u0631\u0643\u064A\u0628 \u062E\u062F\u0645\u0629 Windows \u0646 \!
+NetworkTab.15=\u0627\u0644\u0645\u0644\u0627\u062D\u0629 / \u062A\u0648\u0632\u064A\u0639 \u0625\u0639\u062F\u0627\u062F\u0627\u062A
+NetworkTab.16=\u0645\u0648\u0642\u0641 \u0627\u0644\u0645\u0635\u063A\u0631\u0629 \u0627\u0644\u062A\u064A \u062A\u0633\u0639\u0649 (\u062B\u0627\u0646\u064A\u0629):
+NetworkTab.17=\u062A\u0645\u0643\u064A\u0646 \u0630\u0627\u0643\u0631\u0629 \u0627\u0644\u062A\u062E\u0632\u064A\u0646 \u0627\u0644\u0645\u0624\u0642\u062A
+NetworkTab.18=\u0625\u0639\u0627\u062F\u0629 \u0636\u0628\u0637 \u0645\u062E\u0628\u0623
+NetworkTab.19=\u0647\u0644 \u0623\u0646\u062A \u0645\u062A\u0623\u0643\u062F\u061F
+NetworkTab.20=\u0634\u0628\u0643\u0629 \u0627\u0644\u0646\u0641\u0627\u0630 \u0641\u064A \u0627\u0644\u0648\u0627\u062C\u0647\u0629:
+NetworkTab.22=\u0636\u0628\u0637 \u0634\u0628\u0643\u0629 (\u0645\u062A\u0642\u062F\u0645)
+NetworkTab.23=\u0641\u0631\u0636 IP \u0644\u0645\u0644\u0642\u0645:
+NetworkTab.24=\u0642\u0648\u0629 \u0627\u0644\u0645\u0646\u0641\u0630 \u0644\u0645\u0644\u0642\u0645 (5001 \u0627\u0641\u062A\u0631\u0627\u0636\u064A\u0627):
+NetworkTab.25=PS3 \u0644\u0648\u062D\u0629 \u0627\u0644\u062A\u062D\u0643\u0645
+NetworkTab.26=\u062A\u0631\u0645\u064A\u0632 \u0627\u0644\u062D\u0631\u0648\u0641 \u0645\u0646 \u0623\u0633\u0645\u0627\u0626\u0643\u0645 \u0645\u0644\u0641 PS3 (\u0627\u0646\u0638\u0631 XMB - \u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0646\u0638\u0627\u0645> -> \u0645\u062D\u0627\u0631\u0641):
+NetworkTab.27=\u063A\u064A\u0631 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645\u0629 \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u062A\u064A \u064A\u062C\u0628 \u0639\u062F\u0645 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 :P
+NetworkTab.28=\u0648\u0636\u0639 \u062A\u0648\u0631\u0628\u0648 (\u062A\u0645\u0643\u064A\u0646 tcp_nodelay) / \u062A\u0648\u062E\u064A \u0627\u0644\u062D\u0630\u0631\u060C \u0648\u0644\u0633\u062A \u0645\u062A\u0623\u0643\u062F\u0627 \u0625\u0630\u0627 \u0643\u0627\u0646 \u0647\u0630\u0627 \u0647\u0648 \u0645\u0648\u0627\u0641\u0642 \u0644\u0644\u0642\u064A\u0627\u0645 \u0628\u0630\u0644\u0643
+NetworkTab.29=\u0645\u0646\u0639 \u0637\u0644\u0628 \u0648\u0627\u0631\u062F \u0644\u0646\u0641\u0633 \u0627\u0644\u0645\u0644\u0641 \u0645\u0646 PS3 \u0639\u0646\u062F\u0645\u0627 \u0628\u062F\u0623\u062A \u0641\u064A\u0631\u062A
+NetworkTab.30=\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0641\u0644\u062A\u0631 IP:
+NetworkTab.31=HTTP \u0627\u0644\u0645\u062A\u0642\u062F\u0645\u0629 \u0648\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0646\u0638\u0627\u0645
+NetworkTab.32=HTTP \u0627\u0644\u0645\u062D\u0631\u0643 V2
+NetworkTab.33=\u0645\u0646\u0639 \u0646\u0638\u0627\u0645 \u0627\u0644\u062A\u0634\u063A\u064A\u0644 \u0645\u0646 \u0627\u0644\u0646\u0648\u0645 \u0641\u064A \u062D\u064A\u0646 \u062A\u062F\u0641\u0642
+NetworkTab.34=\u0627\u0644\u0625\u0636\u0627\u0641\u0627\u062A
+NetworkTab.35=\u0623\u0642\u0635\u0649 \u0639\u0631\u0636 \u0627\u0644\u0646\u0637\u0627\u0642 \u0627\u0644\u062A\u0631\u062F\u062F\u064A \u0641\u064A \u0645\u064A\u062C\u0627 \u0628\u062A / \u062B\u0627\u0646\u064A\u0629 (0 \u064A\u0639\u0646\u064A \u0639\u062F\u0645 \u0648\u062C\u0648\u062F \u062D\u062F\u0648\u062F):
+PMS.0=\u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 \u0639\u0627\u0631\u0636\u064A\u0646
+PMS.1=\u0627\u0644\u0635\u0648\u062A
+PMS.2=\#- \u0645\u062E\u0628\u0623 -\#
+PMS.3=A / V \u0637\u0631\u064A\u0642\u0629 \u0628\u062F\u064A\u0644\u0629 \u0645\u062A\u0632\u0627\u0645\u0646\u0629
+PMS.4=\u062A\u0634\u0627\u0628\u0643 \u062A\u0635\u0641\u064A\u0629
+PMS.5=\u0628\u062C\u0647\u0627\u0632 PS3
+PMS.6=\u0627\u0644\u0633\u064A\u0627\u0631\u0627\u062A \u062A\u062D\u0645\u064A\u0644 .srt / .sub \u062A\u0631\u062C\u0645\u0627\u062A
+PMS.7=SkipLoopFilter \u0644\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0641\u0643 H264 (\u062A\u062E\u0641\u0641 \u062C\u0648\u062F\u0629)
+PMS.8=\u062A\u0631\u062C\u0645\u0629
+PMS.9=\u062C\u0645\u064A\u0639 \u0627\u0644\u0645\u0635\u0646\u0641\u0627\u062A \u0627\u0644\u0633\u0645\u0639\u064A\u0629
+PMS.10=\u062A\u0639\u0637\u064A\u0644 \u0628\u0627\u0644\u062A\u0623\u0643\u064A\u062F \u062A\u0631\u062C\u0645\u0627\u062A
+PMS.11=\u062C\u0645\u064A\u0639 \u0627\u0644\u0645\u0633\u0627\u0631\u0627\u062A \u0627\u0644\u0635\u0648\u062A\u064A\u0629
+PMS.12=\u062D\u0633\u0628 \u0627\u0644\u062A\u0627\u0631\u064A\u062E
+PMS.13=\u0628\u0648\u0627\u0633\u0637\u0629 \u0627\u0644\u0641\u0646\u0627\u0646
+PMS.14=Remux \u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u064A H264 \u0645\u0639 \u0645\u064A\u0646\u0643\u0648\u062F\u0631
+PMS.16=\u0645\u0646 \u0627\u0644\u0623\u0644\u0628\u0648\u0645
+PMS.17=\u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 \u0627\u0644\u0639\u0627\u0631\u0636
+PMS.18=\u0645\u062A\u0635\u0644
+PMS.19=\u062D\u0633\u0628 \u0627\u0644\u0646\u0648\u0639
+PMS.21=\u0645\u0646 \u0637\u0631\u0627\u0632 \u0627\u0644\u0643\u0627\u0645\u064A\u0631\u0627
+PMS.22=\u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0641\u0646\u0627\u0646 / \u0627\u0644\u0623\u0644\u0628\u0648\u0645
+PMS.25=\u0628\u0648\u0627\u0633\u0637\u0629 \u0625\u0639\u062F\u0627\u062F\u0627\u062A ISO
+PMS.26=\u0628\u0648\u0627\u0633\u0637\u0629 \u0646\u0648\u0639 / \u0627\u0644\u0641\u0646\u0627\u0646 / \u0627\u0644\u0623\u0644\u0628\u0648\u0645
+PMS.27=\u062D\u0641\u0638 \u0627\u0644\u062A\u0643\u0648\u064A\u0646
+PMS.31=\u0635\u0648\u0631
+PMS.32=\u0643\u0644 \u0627\u0644\u0635\u0648\u0631
+PMS.34=\u0641\u064A\u062F\u064A\u0648
+PMS.35=\u0643\u0644 \u0644\u0642\u0637\u0627\u062A \u0627\u0644\u0641\u064A\u062F\u064A\u0648
+PMS.36=\u0623\u0641\u0644\u0627\u0645 HD
+PMS.37=\#- \u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0641\u064A\u062F\u064A\u0648 -\#
+PMS.39=\u0623\u0641\u0644\u0627\u0645 SD
+PMS.41=(\u0625\u0639\u0627\u062F\u0629) \u062A\u062B\u0628\u064A\u062A Win32 \u0648\u062E\u062F\u0645\u0629
+PMS.130=\u0627\u0644\u0628\u062D\u062B \u0639\u0646 \u0639\u0627\u0631\u0636\u064A\u0646 ...
+ProfileChooser.1=PS3 \u0645\u064A\u062F\u064A\u0627 \u200B\u200B\u0633\u064A\u0631\u0641\u0631 \u0627\u0644\u0634\u062E\u0635\u064A \u0645\u0646\u062A\u0642\u064A
+ProfileChooser.2=\u062D\u062F\u062F
+ProfileChooser.3=\u0645\u0644\u0641 \u0627\u0644\u0645\u0644\u0641 (. \u0623\u0633\u064A\u0648\u0637) \u0623\u0648 \u062F\u0644\u064A\u0644
+StatusTab.2=\u062D\u0627\u0644\u0629
+StatusTab.3=\u0627\u0646\u062A\u0638\u0627\u0631 ...
+StatusTab.5=\u0641\u0627\u0631\u063A
+StatusTab.6=\u062A\u0631\u0627\u0646\u0633\u0643\u0648\u062F\u064A\u0646\u063A \u062D\u0627\u0644\u0629 \u0627\u0644\u0639\u0627\u0632\u0644\u0629:
+StatusTab.7=I / O \u0625\u062D\u0635\u0627\u0626\u064A\u0627\u062A:
+StatusTab.8=\u0645\u0639\u062F\u0644 \u0627\u0644\u0628\u062A \u0627\u0644\u062D\u0627\u0644\u064A:
+StatusTab.9=\u0627\u0644\u0643\u0634\u0641 \u0639\u0646 \u0648\u0633\u0627\u0626\u0644 \u0627\u0644\u0625\u0639\u0644\u0627\u0645 \u0639\u0627\u0631\u0636\u064A\u0646
+StatusTab.10=\u0630\u0631\u0648\u0629 \u0645\u0639\u062F\u0644 \u0627\u0644\u0628\u062A:
+StatusTab.11=\u0645\u064A\u063A\u0627\u0628\u062A \u0641\u064A \u0627\u0644\u062B\u0627\u0646\u064A\u0629
+TSMuxerVideo.0=Demux \u0645\u0639 \u0645\u064A\u0646\u0643\u0648\u062F\u0631 \u0648\u062A\u0631\u0645\u064A\u0632 \u062C\u0645\u064A\u0639 \u0627\u0644\u0645\u0633\u0627\u0631\u0627\u062A \u0627\u0644\u0635\u0648\u062A\u064A\u0629 \u0625\u0644\u0649 AC3
+TSMuxerVideo.1=Demux \u0645\u0639 \u0645\u064A\u0646\u0643\u0648\u062F\u0631 \u0648\u062A\u0631\u0645\u064A\u0632 DTS / FLAC \u0627\u0644\u0645\u0633\u0627\u0631\u0627\u062A \u0627\u0644\u0635\u0648\u062A\u064A\u0629 \u0625\u0644\u0649 LPCM [\u0627\u0644\u062F\u0642\u064A\u0642\u060C \u0648\u0627\u0644\u0633\u0639\u064A \u0644\u0627 \u062A\u0639\u0645\u0644 \u062D\u062A\u0649 \u0627\u0644\u0622\u0646]
+TSMuxerVideo.2=FPS \u0642\u0648\u0629 \u062A\u062D\u0644\u064A\u0644 \u0645\u0646 FFMPEG \u0641\u064A \u0645\u0644\u0641 \u0627\u0644\u062A\u0639\u0631\u064A\u0641
+TSMuxerVideo.3=\u0636\u0628\u0637 \u062A\u0631\u0645\u064A\u0632 \u0627\u0644\u0641\u064A\u062F\u064A\u0648 \u0644\u0645\u062D\u0631\u0643 tsMuxeR \u0641\u0642\u0637
+TSMuxerVideo.19=MUX \u062C\u0645\u064A\u0639 \u0627\u0644\u0645\u0633\u0627\u0631\u0627\u062A \u0627\u0644\u0635\u0648\u062A\u064A\u0629
+TrTab2.0=\u062A\u0645\u0643\u064A\u0646 / \u062A\u0639\u0637\u064A\u0644 \u0645\u062D\u0631\u0643 \u062A\u0631\u0627\u0646\u0633\u0643\u0648\u062F\u064A\u0646\u063A
+TrTab2.1=\u0623\u064A \u0636\u0628\u0637 \u0641\u064A \u0627\u0644\u0648\u0642\u062A \u0627\u0644\u0631\u0627\u0647\u0646
+TrTab2.2=\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u062A\u0631\u0645\u064A\u0632 \u0627\u0644\u0641\u064A\u062F\u064A\u0648 \u0645\u0639 \u0645\u062D\u0631\u0643\u0627\u062A \u0627\u0644\u062A\u0627\u0644\u064A\u0629: \u0645\u064A\u0646\u0643\u0648\u062F\u0631 / \u0627\u0641\u064A\u0633\u064A\u0646\u062B / FFMPEG
+TrTab2.3=\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0635\u0648\u062A\u060C \u062A\u0646\u0637\u0628\u0642 \u0639\u0644\u0649 \u0641\u0643 \u0627\u0644\u0631\u0645\u0648\u0632 \u0627\u0644\u062A\u0627\u0644\u064A\u0629: \u0645\u064A\u0646\u0643\u0648\u062F\u0631 / \u0627\u0641\u064A\u0633\u064A\u0646\u062B / FFMPEG tsMuxeR /
+TrTab2.4=\u0636\u0628\u0637 \u062C\u0648\u062F\u0629 \u0627\u0644\u0641\u064A\u062F\u064A\u0648
+TrTab2.5=\u0645\u0634\u062A\u0631\u0643 \u0641\u064A\u0631\u062A \u0625\u0639\u062F\u0627\u062F\u0627\u062A
+TrTab2.6=\u0641\u0631\u0632 \u0642\u0627\u0626\u0645\u0629 \u0645\u062D\u0631\u0643\u0627\u062A \u0627\u0644\u062A\u062D\u0648\u064A\u0644. \u0623\u0648\u0644 \u0648\u0638\u0647\u0631 \u0641\u064A \u0645\u062C\u0644\u062F \u0627\u0644\u0641\u064A\u062F\u064A\u0648 \u0627\u0644\u0623\u0635\u0644\u064A
+TrTab2.7=\u0645\u062A\u0641\u0631\u0642\u0627\u062A \u062E\u064A\u0627\u0631\u0627\u062A
+TrTab2.8=\u0641\u064A\u0631\u062A \u0644\u062A\u062E\u0637\u064A \u0627\u0644\u0645\u0644\u062D\u0642\u0627\u062A \u0627\u0644\u062A\u0627\u0644\u064A\u0629 (\u0645\u0641\u0635\u0648\u0644\u0629 \u0628\u0641\u0648\u0627\u0635\u0644):
+TrTab2.9=\u0641\u064A\u0631\u062A \u0644\u0625\u062C\u0628\u0627\u0631 \u0627\u0644\u0645\u0644\u062D\u0642\u0627\u062A \u0627\u0644\u062A\u0627\u0644\u064A\u0629 (\u0645\u0641\u0635\u0648\u0644\u0629 \u0628\u0641\u0648\u0627\u0635\u0644):
+TrTab2.10=\u064A\u0633\u0645\u062D \u0644\u0643 \u0644\u062A\u064A\u0627\u0631 DTS \u0645\u0628\u0627\u0634\u0631\u0629 \u0625\u0644\u0649 \u062C\u0647\u0627\u0632 \u0627\u0644\u0627\u0633\u062A\u0642\u0628\u0627\u0644 \u0627\u0644\u062E\u0627\u0635 \u0628\u0643. \ \u0627\u0644\u0628\u0646\u0643 \u0627\u0644\u0623\u0647\u0644\u064A \u062F\u0642\u064A\u0642\u060C \u0641\u0645\u0646 \u0627\u0644\u0645\u0645\u0643\u0646 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0644\u0647\u0627 \u0635\u0648\u062A \u062B\u0627\u0628\u062A. \u0645\u0644\u0627\u062D\u0638\u0627\u062A: \ \u0646 \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u062C\u0647\u0627\u0632 \u0627\u0633\u062A\u0642\u0628\u0627\u0644 \u0645\u062A\u0648\u0627\u0641\u0642 DTS\u060C \u0645\u062A\u0635\u0644\u0629 \u0641\u064A \u0643\u064A\u0628\u0644\u0627\u062A \u0623\u0648 HDMI \ \u0646 \u0648\u0631\u0645\u0632 \u0648\u062D\u062F\u0629 \u0627\u0644\u062A\u062E\u0632\u064A\u0646 \u0639\u0644\u0649 XMB \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0639\u0644\u0649 "\u0637\u0628\u064A\u0639\u064A" \ N-\u0631\u0645\u0632 \u0627\u0644\u0642\u0646\u0648\u0627\u062A \u0639\u0644\u0649 XMB \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0639\u0644\u0649 '+ \u064A\u0645\u064A\u0646 \u064A\u0633\u0627\u0631' \u0646 \n
+TrTab2.11=\u0645\u062D\u0631\u0643\u0627\u062A
+TrTab2.12=\u0636\u0628\u0637 \u0641\u0643 \u0645\u0634\u062A\u0631\u0643
+TrTab2.13=\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u062A\u0634\u0641\u064A\u0631 \u0645\u0634\u062A\u0631\u0643
+TrTab2.14=\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0641\u064A\u062F\u064A\u0648 \u0645\u062D\u0631\u0643\u0627\u062A
+TrTab2.15=\u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0635\u0648\u062A\u064A\u0629 \u0648\u0645\u062D\u0631\u0643\u0627\u062A
+TrTab2.16=\u0645\u062D\u0631\u0643\u0627\u062A \u0627\u0644\u0641\u064A\u062F\u064A\u0648 \u0639\u0644\u0649 \u0634\u0628\u0643\u0629 \u0627\u0644\u0625\u0646\u062A\u0631\u0646\u062A \u0627\u0644\u062C\u0631\u064A
+TrTab2.17=\u0634\u0628\u0643\u0629 \u0635\u0648\u062A \u0645\u062D\u0631\u0643\u0627\u062A \u0627\u0644\u062C\u0631\u064A
+TrTab2.18=\u0645\u062D\u0631\u0643\u0627\u062A \u0645\u062A\u0641\u0631\u0642\u0627\u062A
+TrTab2.19=\u0627\u0644\u0645\u062D\u0631\u0643\u0627\u062A \u0641\u064A \u062A\u0646\u0627\u0632\u0644\u064A
+TrTab2.20=\u0623\u062C\u0644\u060C \u0648\u0623\u0639\u0644\u0649 \u0647\u0648 \u0623\u0648\u0644\u0627
+TrTab2.21=(\u0627\u0641\u064A\u0633\u064A\u0646\u062B \u063A\u064A\u0631 \u0645\u0639\u062A\u0645\u062F\u0629)
+TrTab2.22=\u0627\u0644\u0635\u0648\u062A \u0627\u0644\u062A\u0644\u0642\u0627\u0626\u064A \u0627\u062E\u062A\u0632\u0627\u0644 \u0625\u0644\u0649 44.1 \u0623\u0648 48 \u0643\u064A\u0644\u0648\u0647\u0631\u062A\u0632
+TrTab2.27=DTS / FLAC \u0644\u062A\u062D\u0648\u064A\u0644 LPCM (\u062A\u062D\u062A\u0627\u062C \u0625\u0644\u0649 \u062C\u0647\u0627\u0632 \u0627\u0633\u062A\u0642\u0628\u0627\u0644 \u0644\u062A\u062F\u0641\u0642 HDMI LPCM 5.1)
+TrTab2.28=\u0627\u0644\u062D\u0641\u0627\u0638 \u0639\u0644\u0649 \u0627\u0644\u0635\u0648\u062A DTS \u0641\u064A \u062A\u064A\u0627\u0631 (\u0645\u062A\u0648\u0627\u0641\u0642 \u0645\u0639 \u0627\u0644\u0627\u0646\u062A\u0627\u062C \u0627\u0644\u0628\u0635\u0631\u064A\u0629)
+TrTab2.29=\u0645\u0639\u062F\u0644 \u0627\u0644\u0628\u062A \u0627\u0644\u0635\u0648\u062A AC3 (\u0641\u064A \u0643\u064A\u0644\u0648 \u0628\u0627\u064A\u062A / \u062B\u0627\u0646\u064A\u0629) (\u0645\u062B\u0644\u0627: 384\u060C 576\u060C 640):
+TrTab2.32=MPEG-2 \u062E\u064A\u0627\u0631\u0627\u062A:
+TrTab2.39=\u0648\u0627\u0644\u0645\u062D\u0648\u0644\u0629 \u062A\u0644\u0642\u0627\u0626\u064A\u0627 \u0627\u0644\u0641\u064A\u062F\u064A\u0648 \u0648\u0645\u0648\u0643\u0633\u064A\u062F \u0625\u0644\u0649 \u0627\u0644\u0635\u0648\u062A MPEG-PS / AC3 (\u0645\u062A\u0648\u0627\u0641\u0642\u0629 \u0625\u0644\u0649 \u062D\u062F \u0643\u0628\u064A\u0631 \u0639\u0644\u0649 PS3)
+TrTab2.40=\n\u064A\u0645\u0643\u0646\u0643 \u0623\u0646 \u062A\u0644\u0639\u0628 \u0645\u0639 \u0627\u0644\u0645\u0639\u0644\u0645\u0627\u062A vqscale\u060C vqmin \u0648keyint \u0625\u0644\u0649 \u062A\u062D\u0642\u064A\u0642 \u0627\u0644\u062E\u064A\u0631\u060C \u0648\u062D\u062A\u0649 \u0628\u0644\u0627 \u062E\u0633\u0627\u0626\u0631 \u062A\u0642\u0631\u064A\u0628\u0627 \u0627\u0644\u062A\u062D\u0648\u064A\u0644 \u062C\u0648\u062F\u0629.
+TrTab2.41=\n\u0627\u0644\u0639\u064A\u0628 \u0641\u064A \u0647\u0630\u0627 \u0647\u0648 \u0645\u0639\u062F\u0644 \u0627\u0644\u0628\u062A VBR\u060C \u0648\u0627\u0644\u062A\u064A \u064A\u0645\u0643\u0646 \u0623\u0646 \u064A\u0635\u0644 \u0625\u0644\u0649 \u0630\u0631\u0648\u062A\u0647 \u0641\u064A \u0628\u0639\u0636 \u0627\u0644\u0623\u062D\u064A\u0627\u0646 \u0641\u0648\u0642 \u0642\u062F\u0631\u0629 \u0627\u0644\u0634\u0628\u0643\u0629 \u0643\u062D\u062F \u0623\u0642\u0635\u0649.
+TrTab2.42=\n\u0648\u0647\u0630\u0627 \u0647\u0648 \u0627\u0644\u0633\u0628\u0628 \u064A\u0645\u0643\u0646\u0643 \u0623\u064A\u0636\u0627 \u062A\u0639\u064A\u064A\u0646 \u0639\u0631\u0636 \u0627\u0644\u0646\u0637\u0627\u0642 \u0627\u0644\u062A\u0631\u062F\u062F\u064A \u0625\u0630\u0627 \u0643\u0646\u062A \u0639\u0644\u0649 \u0648\u0627\u064A \u0641\u0627\u064A\u060C \u0648\u0642\u0627\u0646\u0648\u0646 \u0627\u0644\u0625\u062C\u0631\u0627\u0621\u0627\u062A \u0627\u0644\u062C\u0646\u0627\u0626\u064A\u0629\u060C \u0648\u0645\u0627 \u0625\u0644\u0649 \u0630\u0644\u0643\u060C \u0641\u0625\u0646 \u0646\u0648\u0639\u064A\u0629 \u0627\u0644\u0634\u0641\u0631\u0629
+TrTab2.43=\n\u062A\u0648\u0627\u0632\u0646 \u0628\u064A\u0646 \u0633\u0631\u0639\u0629 \u0627\u0644\u0634\u0628\u0643\u0629 \u0648\u0642\u0648\u0629 \u0648\u062D\u062F\u0629 \u0627\u0644\u0645\u0639\u0627\u0644\u062C\u0629 \u0627\u0644\u0645\u0631\u0643\u0632\u064A\u0629: \u0648\u0627\u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u062C\u0648\u062F\u0629 \u0627\u0644\u062A\u064A \u0648\u0636\u0639\u062A \u0641\u064A \u0645\u0639\u062F\u0644 \u0627\u0644\u0628\u062A \u0645\u0642\u064A\u062F\u0629\u060C
+TrTab2.44=\n\u0643\u0644\u0645\u0627 \u0648\u062D\u062F\u0629 \u0627\u0644\u0645\u0639\u0627\u0644\u062C\u0629 \u0627\u0644\u0645\u0631\u0643\u0632\u064A\u0629 \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0643 \u062A\u0639\u0627\u0646\u064A \! \u0623\u064A\u0636\u0627\u060C \u0644\u0627 \u0646\u062A\u0648\u0642\u0639 \u0644\u062A\u062A\u0646\u0627\u0633\u0628 \u0645\u0639 \u0641\u064A\u0644\u0645 \u0627\u0644\u062D\u0631\u0643\u0629 \u0648\u0627\u0644\u0627\u062B\u0627\u0631\u0629 1080P \u0641\u064A \u0623\u0646\u0642\u0649 \u0646\u0648\u0639\u064A\u0629 \u0641\u064A 15Mbps: P
+TrTab2.50=\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0639\u062F\u062F \u0645\u0646 \u0627\u0644\u0642\u0646\u0648\u0627\u062A \u0627\u0644\u0633\u0645\u0639\u064A\u0629 \u0625\u0644\u0649 \u0627\u0644\u0625\u062E\u0631\u0627\u062C:
+TrTab2.51=\u062A\u0639\u0637\u064A\u0644 \u0628\u0627\u0644\u062A\u0623\u0643\u064A\u062F \u062A\u0631\u062C\u0645\u0627\u062A
+TrTab2.52=\u0641\u0635\u0648\u0644 \u0641\u064A\u0631\u062A \u0627\u0644\u062F\u0639\u0645 \u0645\u062C\u0644\u062F / \u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A \u0641\u064A \u062F\u0642\u0627\u0626\u0642:
+TrTab2.55=2 \u0642\u0646\u0648\u0627\u062A (\u0633\u062A\u064A\u0631\u064A\u0648)
+TrTab2.56=6 \u0642\u0646\u0648\u0627\u062A (5.1)
+TrTab2.60=\u0639\u0638\u064A\u0645 \u062C\u0648\u062F\u0629
+TrTab2.61=\u0636\u064A\u0627\u0639 \u062C\u0648\u062F\u0629
+TrTab2.62=\u0630\u0627\u062A \u0646\u0648\u0639\u064A\u0629 \u062C\u064A\u062F\u0629
+TrTab2.63=\u0630\u0627\u062A \u0646\u0648\u0639\u064A\u0629 \u062C\u064A\u062F\u0629 \u0644HD \u0648\u0627\u064A \u0641\u0627\u064A \u062A\u0631\u0627\u0646\u0633\u0643\u0648\u062F\u064A\u0646\u063A
+TrTab2.64=\u0645\u062A\u0648\u0633\u0637\u0629 \u0627\u0644\u062C\u0648\u062F\u0629 \u0644HD \u0648\u0627\u064A \u0641\u0627\u064A \u062A\u0631\u0627\u0646\u0633\u0643\u0648\u062F\u064A\u0646\u063A
+TrTab2.65=\u062C\u0648\u062F\u0629\u060C \u0648\u0627\u0646\u062E\u0641\u0627\u0636 \u0641\u064A \u0646\u0647\u0627\u064A\u0629 \u0648\u062D\u062F\u0629 \u0627\u0644\u0645\u0639\u0627\u0644\u062C\u0629 \u0627\u0644\u0645\u0631\u0643\u0632\u064A\u0629 \u0623\u0648 HD \u062A\u0631\u0627\u0646\u0633\u0643\u0648\u062F\u064A\u0646\u063A \u0648\u0627\u064A \u0641\u0627\u064A
+TracesTab.3=\u0645\u0633\u062D
+TreeNodeSettings.4=\u0644\u0645 \u064A\u062A\u0645 \u062A\u062D\u0645\u064A\u0644 \u0647\u0630\u0627 \u0627\u0644\u0645\u062D\u0631\u0643 \!
View
289 src/main/java/net/pms/messages_he.properties
@@ -0,0 +1,289 @@
+DLNAMediaDatabase.0=\u05d1\u05e1\u05d9\u05e1 \u05d4\u05e0\u05ea\u05d5\u05e0\u05d9\u05dd \u05e9\u05dc \u05d4\u05de\u05d8\u05de\u05d5\u05df \u05d3\u05d5\u05e8\u05e9 \u05d4\u05e4\u05e2\u05dc\u05d4 \u05de\u05d7\u05d3\u05e9.\n\u05e1\u05dc\u05d9\u05d7\u05d4 \u05e2\u05dc \u05d0\u05d9 \u05d4\u05e0\u05e2\u05d9\u05de\u05d5\u05ea \!
+DLNAMediaDatabase.1=\u05d0,\u05d1,\u05d2,\u05d3,\u05d4,\u05d5,\u05d6,\u05d7,\u05d8,\u05d9,\u05db,\u05dc,\u05de,\u05e0,\u05e1,\u05e2,\u05e4,\u05e6,\u05e7,\u05e8,\u05e9,\u05ea,\u05e5,\u05e3,\u05da,\u05dd
+DLNAMediaDatabase.2=\u05e0\u05d9\u05e7\u05d9\u05d5\u05df \u05d1\u05e1\u05d9\u05e1 \u05e0\u05ea\u05d5\u05e0\u05d9\u05dd...
+DLNAMediaDatabase.3=\u05d3\u05d5\u05d7\u05e1 \u05d1\u05e1\u05d9\u05e1 \u05e0\u05ea\u05d5\u05e0\u05d9\u05dd...
+DLNAMediaDatabase.4=\u05e1\u05d5\u05e8\u05e7 \u05ea\u05d9\u05e7\u05d9\u05d4:
+FFMpegDVRMSRemux.0=\u05d3\u05e8\u05da FFmpeg \u05d7\u05dc\u05d5\u05e4\u05d9\u05ea:
+FFMpegDVRMSRemux.1=\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05e2\u05d1\u05d5\u05e8 remuxing \u05e9\u05dc DVR-MS
+FFMpegVideo.0=\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05e7\u05d9\u05d3\u05d5\u05d3 \u05e2\u05d1\u05d5\u05e8 \u05de\u05e0\u05d5\u05e2\u05d9 AviSynth/FFmpeg \u05d1\u05dc\u05d1\u05d3 (\u05d1\u05e2\u05d3\u05d9\u05e4\u05d5\u05ea AviSynth/MEncoder)
+FoldTab.0=<\u05db\u05dc \u05d4\u05db\u05d5\u05e0\u05e0\u05d9\u05dd>
+FoldTab.1=\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05e9\u05d9\u05ea\u05d5\u05e3
+FoldTab.2=\u05e1\u05e8\u05d5\u05e7 \u05d0\u05ea \u05db\u05dc \u05d4\u05ea\u05d9\u05e7\u05d9\u05d5\u05ea \u05d4\u05de\u05e9\u05d5\u05ea\u05e4\u05d5\u05ea
+FoldTab.3=\u05e1\u05e8\u05d9\u05e7\u05ea \u05db\u05dc \u05d4\u05ea\u05d9\u05e7\u05d9\u05d5\u05ea \u05d4\u05de\u05e9\u05d5\u05ea\u05e4\u05d5\u05ea \u05e2\u05dc\u05d5\u05dc \u05dc\u05e7\u05d7\u05ea \u05dc\u05d0 \u05de\u05e2\u05d8 \u05d6\u05de\u05df \!\n
+FoldTab.4=\u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05e8\u05d9\u05e5 \u05e1\u05e8\u05d9\u05e7\u05d4?\n\n
+FoldTab.5=\u05d4\u05e1\u05ea\u05e8 \u05d0\u05ea \u05db\u05dc \u05d4\u05e1\u05d9\u05d5\u05de\u05d5\u05ea
+FoldTab.6=\u05d4\u05e1\u05ea\u05e8 \u05ea\u05d9\u05e7\u05d9\u05ea \#\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05d5\u05d9\u05d3\u05d0\u05d5\#
+FoldTab.7=\u05ea\u05d9\u05e7\u05d9\u05d5\u05ea \u05de\u05e9\u05d5\u05ea\u05e4\u05d5\u05ea
+FoldTab.8=\u05d4\u05e1\u05ea\u05e8 \u05e9\u05de\u05d5\u05ea \u05de\u05e0\u05d5\u05e2\u05d9 \u05e7\u05d9\u05d3\u05d5\u05d3
+FoldTab.9=\u05d4\u05d5\u05e1\u05e3 \u05ea\u05d9\u05e7\u05d9\u05d4
+FoldTab.10=\u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d1\u05d8\u05dc \u05d0\u05ea \u05d4\u05e1\u05e8\u05d9\u05e7\u05d4?\n\n
+FoldTab.11=\u05d0\u05e4\u05e9\u05e8 \u05d4\u05e2\u05ea\u05e7\u05ea \u05d5\u05d9\u05d3\u05d0\u05d5 \u05de\u05e7\u05d5\u05d3\u05d3 \u05dc PS3 (\u05d6\u05d4\u05d9\u05e8\u05d5\u05ea, \u05dc\u05e7\u05d1\u05e6\u05d9\u05dd \u05de\u05e7\u05d5\u05d3\u05d3\u05d9\u05dd \u05d0\u05d9\u05df \u05d2\u05d5\u05d3\u05dc \u05e7\u05d1\u05d5\u05e2!)
+FoldTab.12=\u05de\u05d9\u05d9\u05df \u05d0\u05ea \u05d4\u05ea\u05d9\u05e7\u05d9\u05d5\u05ea \u05d4\u05de\u05e9\u05d5\u05ea\u05e4\u05d5\u05ea
+FoldTab.13=\u05ea\u05de\u05d5\u05e0\u05d5\u05ea \u05de\u05d5\u05e7\u05d8\u05e0\u05d5\u05ea
+FoldTab.14=\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1 MPlayer \u05e2\u05d1\u05d5\u05e8 \u05ea\u05de\u05d5\u05e0\u05d5\u05ea \u05de\u05d5\u05e7\u05d8\u05e0\u05d5\u05ea \u05d1\u05ea\u05e6\u05d5\u05e8\u05ea \u05d5\u05d9\u05d3\u05d0\u05d5
+FoldTab.15=\u05d0\u05dc\u05e4\u05d1\u05d9\u05ea\u05d9 (\u05d0-\u05ea)
+FoldTab.16=\u05dc\u05e4\u05d9 \u05ea\u05d0\u05e8\u05d9\u05da, \u05d4\u05d7\u05d3\u05e9 \u05d1\u05d9\u05d5\u05ea\u05e8 \u05e8\u05d0\u05e9\u05d5\u05df
+FoldTab.17=\u05dc\u05e4\u05d9 \u05ea\u05d0\u05e8\u05d9\u05da, \u05d4\u05d9\u05e9\u05df \u05d1\u05d9\u05d5\u05ea\u05e8 \u05e8\u05d0\u05e9\u05d5\u05df
+FoldTab.18=\u05e1\u05d3\u05e8 \u05d4\u05e7\u05d1\u05e6\u05d9\u05dd:
+FoldTab.19=\u05ea\u05de\u05d5\u05e0\u05d5\u05ea \u05de\u05d5\u05e7\u05d8\u05e0\u05d5\u05ea \u05e9\u05dc DVD ISO
+FoldTab.20=ASCIIbetical
+FoldTab.21=\u05ea\u05de\u05d5\u05e0\u05d5\u05ea \u05de\u05d5\u05e7\u05d8\u05e0\u05d5\u05ea
+FoldTab.22=\u05d0\u05dc\u05e4\u05d0\u05e0\u05d5\u05de\u05e8\u05d9
+FoldTab.23=\u05d4\u05d5\u05e8\u05d3 \u05de amazon.com
+FoldTab.24=\u05d4\u05d5\u05e8\u05d3 \u05de discogs.com
+FoldTab.26=\u05ea\u05e6\u05d5\u05d2\u05ea \u05ea\u05de\u05d5\u05e0\u05d5\u05ea \u05de\u05d5\u05e7\u05d8\u05e0\u05d5\u05ea \u05d1\u05ea\u05e6\u05d5\u05e8\u05ea \u05d0\u05d5\u05d3\u05d9\u05d5:
+FoldTab.27=\u05ea\u05d9\u05e7\u05d9\u05ea \u05db\u05d9\u05e1\u05d5\u05d9 \u05d5\u05d9\u05d3\u05d0\u05d5 \u05d7\u05dc\u05d5\u05e4\u05d9\u05ea
+FoldTab.28=\u05d1\u05d7\u05e8 \u05ea\u05d9\u05e7\u05d9\u05d4
+FoldTab.29=\u05d4\u05e6\u05d2 \u05e1\u05e4\u05e8\u05d9\u05d9\u05ea iPhoto
+FoldTab.30=\u05d4\u05e6\u05d2 \u05e1\u05e4\u05e8\u05d9\u05d9\u05ea iTunes
+FoldTab.31=\u05d4\u05e1\u05ea\u05e8 \u05ea\u05d9\u05e7\u05d9\u05d5\u05ea \u05e8\u05d9\u05e7\u05d5\u05ea/\u05d7\u05e1\u05e8\u05d5\u05ea \u05de\u05d3\u05d9\u05d4 (\u05d6\u05d4\u05d9\u05e8\u05d5\u05ea, \u05e2\u05dc\u05d5\u05dc \u05dc\u05d2\u05e8\u05d5\u05dd \u05dc\u05d8\u05e2\u05d9\u05e0\u05d4 \u05d0\u05d9\u05d8\u05d9\u05ea!)
+FoldTab.32=\u05d4\u05e1\u05ea\u05e8 \u05ea\u05d9\u05e7\u05d9\u05ea \u05de\u05d8\u05de\u05d5\u05df
+FoldTab.33=\u05d4\u05e1\u05ea\u05e8 \u05ea\u05d9\u05e7\u05d9\u05ea \#\u05e7\u05d9\u05d3\u05d5\u05d3\#
+FoldTab.34=\u05d4\u05e6\u05d2 \u05e1\u05e4\u05e8\u05d9\u05d9\u05ea aperture
+FontFileFilter.3=\u05e4\u05d5\u05e0\u05d8\u05d9\u05dd \u05de\u05e1\u05d5\u05d2 TrueType
+LinksTab.5=\u05dc\u05d9\u05e0\u05e7\u05d9\u05dd \u05de\u05d5\u05e2\u05d9\u05dc\u05d9\u05dd:
+LinksTab.6=Build:
+LooksFrame.5=\u05e6\u05d0
+LooksFrame.6=\u05e4\u05d0\u05e0\u05dc \u05e8\u05d0\u05e9\u05d9
+LooksFrame.9=\u05e9\u05de\u05d5\u05e8
+LooksFrame.12=\u05d4\u05e4\u05e2\u05dc \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05d4\u05e9\u05e8\u05ea
+LooksFrame.13=\u05d9\u05e9 \u05dc\u05d4\u05e4\u05e2\u05d9\u05dc \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05d4\u05e9\u05e8\u05ea \u05e2\u05e7\u05d1 \u05e9\u05d9\u05e0\u05d5\u05d9\u05d9 \u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05e9\u05d5\u05e0\u05d9\u05dd
+LooksFrame.18=\u05e1\u05d8\u05d8\u05d5\u05e1
+LooksFrame.19=\u05e2\u05e7\u05d1\u05d5\u05ea
+LooksFrame.20=\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05db\u05dc\u05dc\u05d9\u05d5\u05ea
+LooksFrame.21=\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05e7\u05d9\u05d3\u05d5\u05d3
+LooksFrame.22=\u05e0\u05d9\u05d5\u05d5\u05d8/\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05e9\u05d9\u05ea\u05d5\u05e3
+LooksFrame.24=\u05e2\u05d6\u05e8\u05d4
+LooksFrame.25=\u05d0\u05d5\u05d3\u05d5\u05ea
+LooksFrame.26=\u05dc\u05d1\u05d3\u05d9\u05e7\u05d4 \u05d1\u05dc\u05d1\u05d3!, \u05e2\u05dc\u05d5\u05dc \u05dc\u05d4\u05d9\u05d5\u05ea \u05dc\u05d0 \u05d9\u05e6\u05d9\u05d1!
+MEncoderAviSynth.2=Video decoder settings for AviSynth engine only
+MEncoderAviSynth.3=Enable AviSynth variable framerate change into a constant framerate (convertfps=true)
+MEncoderAviSynth.4=#AviSynth script is now fully customisable !\n
+MEncoderAviSynth.5=#You must use the following variables (\"clip\" being the avisynth variable of the movie):\n
+MEncoderAviSynth.6=#<movie>: insert the complete DirectShowSource instruction [ clip=DirectShowSource(movie, convertfps) ]\n
+MEncoderAviSynth.7=#<sub>: insert the complete TextSub/VobSub instruction if there's any detected srt/sub/idx/ass subtitle file\n
+MEncoderAviSynth.8=#<moviefilename>: variable of the movie filename, if you want to do all this by yourself\n
+MEncoderAviSynth.9=#Be careful, the custom script MUST return the clip object\n
+MEncoderAviSynth.10=<\u05e1\u05e8\u05d8>\n
+MEncoderAviSynth.11=<sub>\n
+MEncoderAviSynth.12=return clip
+MEncoderVideo.0=Skip loop filter deblocking for h264. Can degrade quality.
+MEncoderVideo.1=Video/Audio decoder settings for MEncoder engine only
+MEncoderVideo.2=A/V sync alternative method
+MEncoderVideo.3=Use application default codec parameters (Recommended!)
+MEncoderVideo.4=Force framerate parsed from FFmpeg
+MEncoderVideo.5=You can add here specific options, such as a denoise filter for example: -vf hqdn3d
+MEncoderVideo.6=Custom options:
+MEncoderVideo.7=Audio language priority:
+MEncoderVideo.8=Subtitles settings
+MEncoderVideo.9=Subtitles language priority:
+MEncoderVideo.10=Audio/subtitles language priority (ex: en,off;jpn,eng)
+MEncoderVideo.11=Subtitles codepage:
+MEncoderVideo.12=Override styled subtitles settings: Font scale
+MEncoderVideo.13=Font outline
+MEncoderVideo.14=Font shadow
+MEncoderVideo.15=Sub margin (px)
+MEncoderVideo.16=Plaintext subtitles settings: Font scale
+MEncoderVideo.17=Font outline
+MEncoderVideo.18=\u05d8\u05e9\u05d8\u05d5\u05e9 \u05e4\u05d5\u05e0\u05d8
+MEncoderVideo.19=Sub margin (%)
+MEncoderVideo.20=Use ASS/SSA subtitle styling
+MEncoderVideo.21=Fontconfig/Embedded fonts
+MEncoderVideo.22=Automatically load *.srt/*.sub subtitles with the same file name
+MEncoderVideo.23=\u05de\u05e6\u05d1 FriBiDi
+MEncoderVideo.24=Specify TrueType Font (for subtitles):
+MEncoderVideo.25=\u05d1\u05d7\u05e8 \u05e4\u05d5\u05e0\u05d8 TrueType
+MEncoderVideo.26=Deinterlace filter
+MEncoderVideo.27=Use Video Scaler
+MEncoderVideo.28=\u05e8\u05d5\u05d7\u05d1
+MEncoderVideo.29=Expert Settings : Codec-specific parameters
+MEncoderVideo.30=\u05d2\u05d5\u05d1\u05d4
+MEncoderVideo.31=\u05e6\u05d1\u05e2 \u05db\u05ea\u05d5\u05d1\u05d9\u05d5\u05ea
+MEncoderVideo.32=Remux when audio track is AC3 (no re-encode)
+MEncoderVideo.33=Custom parameters:
+MEncoderVideo.34=Edit codecs specific parameters
+MEncoderVideo.35=Use multiple CPU cores
+MEncoderVideo.36=Use embedded style
+MEncoderVideo.37=Alternate Subtitles Folder
+MEncoderVideo.38=Remux videos with tsMuxeR when possible instead of transcoding
+MEncoderVideo.39=Remux DVD ISO video track (no re-encode)
+MEncoderVideo.68=\#Here you can put specific parameters for some codec combinations.\n
+MEncoderVideo.69=\#It's mostly for A/V synchronization issues, but it can be used for anything else as well\n
+MEncoderVideo.70=\#Consider it like expert settings as this shouldn't be used if you don't know exactly what you're doing\n
+MEncoderVideo.71=\#Syntax is {java condition} :: {MEncoder options} ; You can cumulate several options\n
+MEncoderVideo.72=\#Tokens authorized: filename srtfile container vcodec acodec samplerate framerate width height channels duration\n
+MEncoderVideo.73=\#Careful, any malformed line will be wiped out\n
+MEncoderVideo.75=\#Special options:\n
+MEncoderVideo.76=\# -noass: definitely disable ASS/SSA subtitles as they can mess up A/V sync\n
+MEncoderVideo.77=\# -nosync: definitely disable A/V sync alternative method for this condition (-mc will do the same)\n
+MEncoderVideo.78=\# -quality: override video quality settings\n
+MEncoderVideo.79=\# -mt: force usage of the multithreaded MEncoder build\n
+MEncoderVideo.80=\#This list will improve with time: tweaks/feedbacks on various codecs/files are always welcome\n
+MEncoderVideo.87=\#You can now put your own conditions/options ! Here some examples: for example, to enable the mt build of MEncoder\n
+MEncoderVideo.88=\#for any H264 HD content (redundant with the main option): vcodec == h264 && width >= 1280 :: -mt -lavdopts fast\n
+MEncoderVideo.89=\#to remove 24p judder on a 50hz TV: framerate == 23.976 :: -speed 1.042709376 -ofps 25\n
+MEncoderVideo.91=\#to remux when video is MPEG-2 and there's no subtitles: vcodec == mpeg2 && srtfile == null :: -ovc copy -nosync
+MEncoderVideo.92=DVD/VOBsub subtitle quality (0-4) (higher is better):
+MEncoderVideo.93=Add borders for overscan compensation:
+MEncoderVideo.94=Forced sub:
+MEncoderVideo.95=Forced tags:
+MEncoderVideo.96=cp1250 /* Windows - Eastern Europe */
+MEncoderVideo.97=cp1251 /* Windows - Cyrillic */
+MEncoderVideo.98=cp1252 /* Windows - Western Europe */
+MEncoderVideo.99=cp1253 /* Windows - Greek */
+MEncoderVideo.100=cp1254 /* Windows - Turkish */
+MEncoderVideo.101=cp1255 /* Windows - Hebrew */
+MEncoderVideo.102=cp1256 /* Windows - Arabic */
+MEncoderVideo.103=cp1257 /* Windows - Baltic */
+MEncoderVideo.104=cp1258 /* Windows - Vietnamese */
+MEncoderVideo.105=ISO-8859-1 /* Western Europe */
+MEncoderVideo.106=ISO-8859-2 /* Western and Central Europe */
+MEncoderVideo.107=ISO-8859-3 /* Western Europe and South European */
+MEncoderVideo.108=ISO-8859-4 /* Western Europe and Baltic countries */
+MEncoderVideo.109=ISO-8859-5 /* Cyrillic alphabet */
+MEncoderVideo.110=ISO-8859-6 /* Arabic */
+MEncoderVideo.111=ISO-8859-7 /* Greek */
+MEncoderVideo.112=ISO-8859-8 /* Hebrew */
+MEncoderVideo.113=ISO-8859-9 /* Western Europe with amended Turkish */
+MEncoderVideo.114=ISO-8859-10 /* Western Europe with Nordic languages */
+MEncoderVideo.115=ISO-8859-11 /* Thai */
+MEncoderVideo.116=ISO-8859-13 /* Baltic languages plus Polish */
+MEncoderVideo.117=ISO-8859-14 /* Celtic languages */
+MEncoderVideo.118=ISO-8859-15 /* Added the Euro sign */
+MEncoderVideo.119=ISO-8859-16 /* Central European languages */
+MEncoderVideo.120=cp932 /* Japanese */
+MEncoderVideo.121=cp936 /* Chinese */
+MEncoderVideo.122=cp949 /* Korean */
+MEncoderVideo.123=cp950 /* Big5, Taiwanese, Cantonese */
+MEncoderVideo.124=UTF-8 /* Unicode */
+MEncoderVideo.125=Choose Subtitles Color
+NetworkTab.0=Language [needs application restart]:
+NetworkTab.1=Browse compressed archives (.rar/.zip/.cbr)
+NetworkTab.2=Generate thumbnails
+NetworkTab.3=Start minimized
+NetworkTab.4=Install as a Windows Service
+NetworkTab.5=General settings
+NetworkTab.6=Transcode buffer maximum size, in megabytes (maximum: MAX_BUFFER_SIZE):
+NetworkTab.7=Number of cores used for transcoding: (it seems you have
+NetworkTab.8=Check for updates
+NetworkTab.9=Check automatically
+NetworkTab.11=You have installed the Windows service \! For using it, you must quit this application,\n
+NetworkTab.12=then start (and configure) the service from the windows administration panel.\n\n
+NetworkTab.13=The cache will be reinitialized \!\n
+NetworkTab.14=Error in the installation of the Windows service!\n
+NetworkTab.15=Navigation/Parsing settings
+NetworkTab.16=Thumbnail seeking position (in seconds):
+NetworkTab.17=Enable the cache
+NetworkTab.18=Reset cache
+NetworkTab.19=Are you sure?
+NetworkTab.20=Force networking on interface:
+NetworkTab.22=Network settings (advanced)
+NetworkTab.23=Force IP of the server:
+NetworkTab.24=Force port of the server (5001 by default):
+NetworkTab.25=PS3 Settings
+NetworkTab.26=Character encoding of your PS3 file names (see XMB->System settings->Charset):
+NetworkTab.27=Unused settings you shouldn't use :p
+NetworkTab.28=Turbo mode (enable tcp_nodelay) / be careful, not sure if that's ok to do this
+NetworkTab.29=Block incoming request for the same file from PS3 when transcode has started
+NetworkTab.30=Use an IP filter:
+NetworkTab.31=Advanced HTTP and system settings
+NetworkTab.32=HTTP Engine V2
+NetworkTab.33=Prevent OS from sleeping while streaming
+NetworkTab.34=Plugins
+NetworkTab.35=Maximum bandwidth in Mb/s (0 means no limit):
+PMS.0=No renderers were found
+PMS.1=Audio
+PMS.2=\#- Cache -\#
+PMS.3=A/V sync alternative method
+PMS.4=Deinterlace Filter
+PMS.5=Connected to PS3
+PMS.6=Auto load .srt/.sub subtitles
+PMS.7=SkipLoopFilter for H264 Decoding (Could degrade quality)
+PMS.8=Subtitles
+PMS.9=All Audio Playlists
+PMS.10=Definitely disable subtitles
+PMS.11=All Audio Tracks
+PMS.12=By Date
+PMS.13=By Artist
+PMS.14=Default H264 Remux with MEncoder
+PMS.16=By Album
+PMS.17=Unknown renderer
+PMS.18=Connected
+PMS.19=By Genre
+PMS.21=By camera model
+PMS.22=By Artist/Album
+PMS.25=By ISO settings
+PMS.26=By Genre/Artist/Album
+PMS.27=Save configuration
+PMS.31=Photo
+PMS.32=All Photos
+PMS.34=Video
+PMS.35=All Videos
+PMS.36=HD Videos
+PMS.37=\#- Video Settings -\#
+PMS.39=SD Videos
+PMS.41=(Re)installing Win32 service
+PMS.130=Searching for renderers...
+ProfileChooser.1=PS3 Media Server Profile Chooser
+ProfileChooser.2=Select
+ProfileChooser.3=Profile file (.conf) or directory
+StatusTab.2=Status
+StatusTab.3=Waiting...
+StatusTab.5=Empty
+StatusTab.6=Transcoding buffer status:
+StatusTab.7=I/O statistics:
+StatusTab.8=Current bitrate:
+StatusTab.9=Detected media renderers
+StatusTab.10=Peak bitrate:
+StatusTab.11=Mb/s
+TSMuxerVideo.0=Demux with MEncoder and encode all audio tracks to AC3
+TSMuxerVideo.1=Demux with MEncoder and encode DTS/FLAC audio tracks to LPCM [Careful, seeking don't work yet]
+TSMuxerVideo.2=Force FPS parsed from FFmpeg in the meta file
+TSMuxerVideo.3=Video decoder settings for tsMuxeR engine only
+TSMuxerVideo.19=Mux all audio tracks
+TrTab2.0=Enable/disable a transcoding engine
+TrTab2.1=No settings for now
+TrTab2.2=Video encoder settings with following engines: MEncoder/AviSynth/FFmpeg
+TrTab2.3=Audio settings, apply to following decoders: MEncoder/AviSynth/FFmpeg/tsMuxeR
+TrTab2.4=Video quality settings
+TrTab2.5=Common transcode settings
+TrTab2.6=Sort the transcoding engines list. First one will appears in the original video folder
+TrTab2.7=Misc options
+TrTab2.8=Skip transcode for the following extensions (comma separated):
+TrTab2.9=Force transcode for the following extensions (comma separated):
+TrTab2.10=Allows you to stream DTS directly to your receiver.\nBe careful, it's possible to have a static sound. Notes:\n- You must have a DTS compatible receiver, connected on TOSLINK or HDMI\n- The volume icon on XMB must be on 'Normal'\n- The channels icon on XMB must be on 'Left+Right'\n
+TrTab2.11=Engines
+TrTab2.12=Common decoder settings
+TrTab2.13=Common encoder settings
+TrTab2.14=Video Files Engines
+TrTab2.15=Audio Files Engines
+TrTab2.16=Web Video Streaming Engines
+TrTab2.17=Web Audio Streaming Engines
+TrTab2.18=Misc Engines
+TrTab2.19=Engines are in descending
+TrTab2.20=order; the highest is first
+TrTab2.21=(AviSynth not supported)
+TrTab2.22=Automatic audio resampling to 44.1 or 48 kHz
+TrTab2.27=DTS/FLAC to LPCM conversion (You need an HDMI receiver for streaming LPCM 5.1)
+TrTab2.28=Keep DTS audio in stream (Compatible with optical output)
+TrTab2.29=AC3 audio bitrate (in Kb/s) (ex: 384, 576, 640):
+TrTab2.32=MPEG-2 options:
+TrTab2.39=The video is automatically transcoded and muxed to a MPEG-PS / AC3 audio (highly compatible on PS3)
+TrTab2.40=\nYou can play with the vqscale, vqmin and keyint parameters to achieve good, even almost lossless transcoding quality.
+TrTab2.41=\nThe drawback to this is the VBR bitrate, which can sometimes peak above your max network capacity.
+TrTab2.42=\nThat's why you can also set the bandwidth if you're on WiFi, CPL, etc. However, the transcoding quality
+TrTab2.43=\nis a balance between network speed and CPU power: the more quality you put into a constrained bitrate,
+TrTab2.44=\nthe more your CPU will suffer\! Also, don't expect to fit a 1080p action movie in the purest quality in 15Mbps :p
+TrTab2.50=Maximum number of audio channels to output:
+TrTab2.51=Definitely disable subtitles
+TrTab2.52=Chapters \#Transcode\# folder support / Interval in minutes:
+TrTab2.55=2 channels (Stereo)
+TrTab2.56=6 channels (5.1)
+TrTab2.60=Great quality
+TrTab2.61=Lossless quality
+TrTab2.62=Good quality
+TrTab2.63=Good quality for HD Wifi transcoding
+TrTab2.64=Medium quality for HD Wifi transcoding
+TrTab2.65=Low quality, low-end CPU or HD Wifi transcoding
+TracesTab.3=Clear
+TreeNodeSettings.4=This engine is not loaded\!
View
81 src/main/java/net/pms/newgui/GeneralTab.java
@@ -19,6 +19,7 @@
package net.pms.newgui;
import java.awt.Component;
+import java.awt.ComponentOrientation;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
@@ -48,6 +49,7 @@
import net.pms.external.ExternalFactory;
import net.pms.external.ExternalListener;
import net.pms.network.NetworkConfiguration;
+import net.pms.util.FormLayoutUtil;
import net.pms.util.KeyedComboBoxModel;
import org.apache.commons.lang.StringUtils;
@@ -62,6 +64,10 @@
public class GeneralTab {
private static final Logger logger = LoggerFactory.getLogger(GeneralTab.class);
+
+ private static final String COL_SPEC = "left:pref, 2dlu, p, 2dlu , p, 2dlu, p, 2dlu, pref:grow";
+ private static final String ROW_SPEC = "p, 0dlu, p, 0dlu, p, 3dlu, p, 3dlu, p, 3dlu,p, 3dlu, p, 15dlu, p, 3dlu,p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p,3dlu, p, 3dlu, p, 15dlu, p,3dlu, p, 3dlu, p, 15dlu, p, 3dlu, p";
+
private JCheckBox smcheckBox;
private JCheckBox autoUpdateCheckBox;
private JCheckBox newHTTPEngine;
@@ -80,9 +86,12 @@
}
public JComponent build() {
- FormLayout layout = new FormLayout(
- "left:pref, 2dlu, p, 2dlu , p, 2dlu, p, 2dlu, pref:grow",
- "p, 0dlu, p, 0dlu, p, 3dlu, p, 3dlu, p, 3dlu,p, 3dlu, p, 15dlu, p, 3dlu,p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p,3dlu, p, 3dlu, p, 15dlu, p,3dlu, p, 3dlu, p, 15dlu, p, 3dlu, p");
+ // Apply the orientation for the locale
+ Locale locale = new Locale(configuration.getLanguage());
+ ComponentOrientation orientation = ComponentOrientation.getOrientation(locale);
+ String colSpec = FormLayoutUtil.getColSpec(COL_SPEC, orientation);
+
+ FormLayout layout = new FormLayout(colSpec, ROW_SPEC);
PanelBuilder builder = new PanelBuilder(layout);
builder.setBorder(Borders.DLU4_BORDER);
builder.setOpaque(true);
@@ -101,12 +110,22 @@ public void itemStateChanged(ItemEvent e) {
smcheckBox.setSelected(true);
}
- JComponent cmp = builder.addSeparator(Messages.getString("NetworkTab.5"), cc.xyw(1, 1, 9));
+ JComponent cmp = builder.addSeparator(Messages.getString("NetworkTab.5"),
+ FormLayoutUtil.flip(cc.xyw(1, 1, 9), colSpec, orientation));
cmp = (JComponent) cmp.getComponent(0);
cmp.setFont(cmp.getFont().deriveFont(Font.BOLD));
-
- builder.addLabel(Messages.getString("NetworkTab.0"), cc.xy(1, 7));
- final KeyedComboBoxModel kcbm = new KeyedComboBoxModel(new Object[]{"bg", "ca", "zhs", "zht", "cz", "da", "nl", "en", "fi", "fr", "de", "el", "is", "it", "ja", "ko", "no", "pl", "pt", "br", "ro", "ru", "sl", "es", "sv", "tr"}, new Object[]{"Bulgarian", "Catalan", "Chinese (Simplified)", "Chinese (Traditional)", "Czech", "Danish", "Dutch", "English", "Finnish", "French", "German", "Greek", "Icelandic", "Italian", "Japanese", "Korean", "Norwegian", "Polish", "Portuguese", "Portuguese (Brazilian)", "Romanian", "Russian", "Slovenian", "Spanish", "Swedish", "Turkish"});
+ builder.addLabel(Messages.getString("NetworkTab.0"),
+ FormLayoutUtil.flip(cc.xy(1, 7), colSpec, orientation));
+ final KeyedComboBoxModel kcbm = new KeyedComboBoxModel(new Object[] {
+ "ar", "bg", "ca", "zhs", "zht", "cz", "da", "nl", "en", "fi", "fr",
+ "de", "el", "he", "is", "it", "ja", "ko", "no", "pl", "pt", "br",
+ "ro", "ru", "sl", "es", "sv", "tr" }, new Object[] {
+ "Arabic", "Bulgarian", "Catalan", "Chinese (Simplified)",
+ "Chinese (Traditional)", "Czech", "Danish", "Dutch", "English",
+ "Finnish", "French", "German", "Greek", "Hebrew", "Icelandic", "Italian",
+ "Japanese", "Korean", "Norwegian", "Polish", "Portuguese",
+ "Portuguese (Brazilian)", "Romanian", "Russian", "Slovenian",
+ "Spanish", "Swedish", "Turkish" });
langs = new JComboBox(kcbm);
langs.setEditable(false);
String defaultLang = null;
@@ -131,9 +150,10 @@ public void itemStateChanged(ItemEvent e) {
}
}
});
- builder.add(langs, cc.xyw(3, 7, 7));
- builder.add(smcheckBox, cc.xyw(1, 9, 9));
+ builder.add(langs, FormLayoutUtil.flip(cc.xyw(3, 7, 7), colSpec, orientation));
+
+ builder.add(smcheckBox, FormLayoutUtil.flip(cc.xyw(1, 9, 9), colSpec, orientation));
JButton service = new JButton(Messages.getString("NetworkTab.4"));
service.addActionListener(new ActionListener() {
@@ -157,7 +177,7 @@ public void actionPerformed(ActionEvent e) {
}
});
- builder.add(service, cc.xy(1, 11));
+ builder.add(service, FormLayoutUtil.flip(cc.xy(1, 11), colSpec, orientation));
if (System.getProperty(LooksFrame.START_SERVICE) != null || !Platform.isWindows()) {
service.setEnabled(false);
@@ -173,7 +193,7 @@ public void actionPerformed(ActionEvent e) {
}
});
- builder.add(checkForUpdates, cc.xy(1, 13));
+ builder.add(checkForUpdates, FormLayoutUtil.flip(cc.xy(1, 13), colSpec, orientation));
autoUpdateCheckBox = new JCheckBox(Messages.getString("NetworkTab.9"));
autoUpdateCheckBox.setContentAreaFilled(false);
@@ -187,7 +207,7 @@ public void itemStateChanged(ItemEvent e) {
autoUpdateCheckBox.setSelected(true);
}
- builder.add(autoUpdateCheckBox, cc.xyw(7, 13, 3));
+ builder.add(autoUpdateCheckBox, FormLayoutUtil.flip(cc.xyw(7, 13, 3), colSpec, orientation));
if (!Build.isUpdatable()) {
checkForUpdates.setEnabled(false);
@@ -236,7 +256,7 @@ public void keyReleased(KeyEvent e) {
}
});
- cmp = builder.addSeparator(Messages.getString("NetworkTab.22"), cc.xyw(1, 21, 9));
+ cmp = builder.addSeparator(Messages.getString("NetworkTab.22"), FormLayoutUtil.flip(cc.xyw(1, 21, 9), colSpec, orientation));
cmp = (JComponent) cmp.getComponent(0);
cmp.setFont(cmp.getFont().deriveFont(Font.BOLD));
@@ -283,19 +303,19 @@ public void keyReleased(KeyEvent e) {
}
});
- builder.addLabel(Messages.getString("NetworkTab.20"), cc.xy(1, 23));
- builder.add(networkinterfacesCBX, cc.xyw(3, 23, 7));
- builder.addLabel(Messages.getString("NetworkTab.23"), cc.xy(1, 25));
- builder.add(host, cc.xyw(3, 25, 7));
- builder.addLabel(Messages.getString("NetworkTab.24"), cc.xy(1, 27));
- builder.add(port, cc.xyw(3, 27, 7));
- builder.addLabel(Messages.getString("NetworkTab.30"), cc.xy(1, 29));
- builder.add(ip_filter, cc.xyw(3, 29, 7));
- builder.addLabel(Messages.getString("NetworkTab.35"), cc.xy(1, 31));
- builder.add(maxbitrate, cc.xyw(3, 31, 7));
+ builder.addLabel(Messages.getString("NetworkTab.20"), FormLayoutUtil.flip(cc.xy(1, 23), colSpec, orientation));
+ builder.add(networkinterfacesCBX, FormLayoutUtil.flip(cc.xyw(3, 23, 7), colSpec, orientation));
+ builder.addLabel(Messages.getString("NetworkTab.23"), FormLayoutUtil.flip(cc.xy(1, 25), colSpec, orientation));
+ builder.add(host, FormLayoutUtil.flip(cc.xyw(3, 25, 7), colSpec, orientation));
+ builder.addLabel(Messages.getString("NetworkTab.24"), FormLayoutUtil.flip(cc.xy(1, 27), colSpec, orientation));
+ builder.add(port, FormLayoutUtil.flip(cc.xyw(3, 27, 7), colSpec, orientation));
+ builder.addLabel(Messages.getString("NetworkTab.30"), FormLayoutUtil.flip(cc.xy(1, 29), colSpec, orientation));
+ builder.add(ip_filter, FormLayoutUtil.flip(cc.xyw(3, 29, 7), colSpec, orientation));
+ builder.addLabel(Messages.getString("NetworkTab.35"), FormLayoutUtil.flip(cc.xy(1, 31), colSpec, orientation));
+ builder.add(maxbitrate, FormLayoutUtil.flip(cc.xyw(3, 31, 7), colSpec, orientation));
- cmp = builder.addSeparator(Messages.getString("NetworkTab.31"), cc.xyw(1, 33, 9));
+ cmp = builder.addSeparator(Messages.getString("NetworkTab.31"), FormLayoutUtil.flip(cc.xyw(1, 33, 9), colSpec, orientation));
cmp = (JComponent) cmp.getComponent(0);
cmp.setFont(cmp.getFont().deriveFont(Font.BOLD));
@@ -306,7 +326,7 @@ public void itemStateChanged(ItemEvent e) {
configuration.setHTTPEngineV2((e.getStateChange() == ItemEvent.SELECTED));
}
});
- builder.add(newHTTPEngine, cc.xyw(1, 35, 9));
+ builder.add(newHTTPEngine, FormLayoutUtil.flip(cc.xyw(1, 35, 9), colSpec, orientation));
preventSleep = new JCheckBox(Messages.getString("NetworkTab.33"));
preventSleep.setSelected(configuration.isPreventsSleep());
@@ -315,20 +335,25 @@ public void itemStateChanged(ItemEvent e) {
configuration.setPreventsSleep((e.getStateChange() == ItemEvent.SELECTED));
}
});
- builder.add(preventSleep, cc.xyw(1, 37, 9));
+ builder.add(preventSleep, FormLayoutUtil.flip(cc.xyw(1, 37, 9), colSpec, orientation));
- cmp = builder.addSeparator(Messages.getString("NetworkTab.34"), cc.xyw(1, 39, 9));
+ cmp = builder.addSeparator(Messages.getString("NetworkTab.34"), FormLayoutUtil.flip(cc.xyw(1, 39, 9), colSpec, orientation));
cmp = (JComponent) cmp.getComponent(0);
cmp.setFont(cmp.getFont().deriveFont(Font.BOLD));
pPlugins = new JPanel(new GridLayout());
- builder.add(pPlugins, cc.xyw(1, 41, 9));
+ builder.add(pPlugins, FormLayoutUtil.flip(cc.xyw(1, 41, 9), colSpec, orientation));
JPanel panel = builder.getPanel();
+
+ // Apply the orientation to the panel and all components in it
+ panel.applyComponentOrientation(orientation);
+
JScrollPane scrollPane = new JScrollPane(
panel,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+
return scrollPane;
}
View
27 src/main/java/net/pms/newgui/LooksFrame.java
@@ -19,12 +19,14 @@
package net.pms.newgui;
import java.awt.BorderLayout;
+import java.awt.ComponentOrientation;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.URL;
+import java.util.Locale;
import java.util.Observable;
import java.util.Observer;
@@ -340,19 +342,32 @@ public void actionPerformed(ActionEvent e) {
quit.setEnabled(false);
}
toolBar.add(new JPanel());
+
+ // Apply the orientation to the toolbar and all components in it
+ Locale locale = new Locale(configuration.getLanguage());
+ ComponentOrientation orientation = ComponentOrientation.getOrientation(locale);
+ toolBar.applyComponentOrientation(orientation);
+
panel.add(toolBar, BorderLayout.NORTH);
panel.add(buildMain(), BorderLayout.CENTER);
status = new JLabel(" ");
status.setBorder(new CompoundBorder(new EtchedBorder(), new EmptyBorder(0, 5, 0, 5)));
+ status.setComponentOrientation(orientation);
+
+ // Calling applyComponentOrientation() here would be ideal.
+ // Alas it horribly mutilates the layout of several tabs.
+ //panel.applyComponentOrientation(orientation);
panel.add(status, BorderLayout.SOUTH);
+
+
return panel;
}
public JComponent buildMain() {
JTabbedPane tabbedPane = new JTabbedPane(SwingConstants.TOP);
- st = new StatusTab();
- tt = new TracesTab();
+ st = new StatusTab(configuration);
+ tt = new TracesTab(configuration);
tr = new TranscodingTab(configuration);
nt = new GeneralTab(configuration);
ft = new NavigationShareTab(configuration);
@@ -366,6 +381,14 @@ public JComponent buildMain() {
tabbedPane.addTab(Messages.getString("LooksFrame.25"), /*readImageIcon("documentinfo-16.png"),*/ new AboutTab().build());
tabbedPane.setBorder(new EmptyBorder(5, 5, 5, 5));
+
+ // Set the orientation of the tabbedPane. Note: not using
+ // applyComponentOrientation() here on purpose as it will horribly
+ // mutilate the layout of several tabs.
+ Locale locale = new Locale(configuration.getLanguage());
+ ComponentOrientation orientation = ComponentOrientation.getOrientation(locale);
+ tabbedPane.setComponentOrientation(orientation);
+
return tabbedPane;
}
View
136 src/main/java/net/pms/newgui/NavigationShareTab.java
@@ -19,6 +19,7 @@
package net.pms.newgui;
import java.awt.Component;
+import java.awt.ComponentOrientation;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -27,6 +28,7 @@
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
+import java.util.Locale;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
@@ -44,6 +46,7 @@
import net.pms.PMS;
import net.pms.configuration.PmsConfiguration;
import net.pms.dlna.DLNAMediaDatabase;
+import net.pms.util.FormLayoutUtil;
import net.pms.util.KeyedComboBoxModel;
import org.slf4j.Logger;
@@ -58,6 +61,12 @@
public class NavigationShareTab {
private static final Logger LOGGER = LoggerFactory.getLogger(NavigationShareTab.class);
public static final String ALL_DRIVES = Messages.getString("FoldTab.0");
+
+ private static final String PANEL_COL_SPEC = "left:pref, 50dlu, pref, 150dlu, pref, 25dlu, pref, 25dlu, pref, default:grow";
+ private static final String PANEL_ROW_SPEC = "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 10dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 10dlu, fill:default:grow";
+ private static final String SHARED_FOLDER_COL_SPEC = "left:pref, left:pref, pref, pref, pref, 0:grow";
+ private static final String SHARED_FOLDER_ROW_SPEC = "p, 3dlu, p, 3dlu, fill:default:grow";
+
private JList FList;
private DefaultListModel df;
private JCheckBox hidevideosettings;
@@ -112,12 +121,13 @@ private void updateModel() {
}
public JComponent build() {
+ // Apply the orientation for the locale
+ Locale locale = new Locale(configuration.getLanguage());
+ ComponentOrientation orientation = ComponentOrientation.getOrientation(locale);
+ String colSpec = FormLayoutUtil.getColSpec(PANEL_COL_SPEC, orientation);
// Set basic layout
- FormLayout layout = new FormLayout(
- "left:pref, 50dlu, pref, 150dlu, pref, 25dlu, pref, 25dlu, pref, default:grow", //columns
- "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 10dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 10dlu, fill:default:grow" //rows
- );
+ FormLayout layout = new FormLayout(colSpec, PANEL_ROW_SPEC);
PanelBuilder builder = new PanelBuilder(layout);
builder.setBorder(Borders.DLU4_BORDER);
builder.setOpaque(true);
@@ -129,72 +139,57 @@ public JComponent build() {
PanelBuilder builderSharedFolder = initSharedFoldersGuiComponents(cc);
// Build gui with initialized components
- JComponent cmp = builder.addSeparator(Messages.getString("FoldTab.13"), cc.xyw(1, 1, 10));
+ JComponent cmp = builder.addSeparator(Messages.getString("FoldTab.13"),
+ FormLayoutUtil.flip(cc.xyw(1, 1, 10), colSpec, orientation));
cmp = (JComponent) cmp.getComponent(0);
cmp.setFont(cmp.getFont().deriveFont(Font.BOLD));
- builder.add(thumbgenCheckBox, cc.xyw(1, 3, 3));
- builder.addLabel(Messages.getString("NetworkTab.16"), cc.xyw(4, 3, 3));
- builder.add(seekpos, cc.xyw(6, 3, 2));
+ builder.add(thumbgenCheckBox, FormLayoutUtil.flip(cc.xyw(1, 3, 3), colSpec, orientation));
+ builder.addLabel(Messages.getString("NetworkTab.16"), FormLayoutUtil.flip(cc.xyw(4, 3, 3), colSpec, orientation));
+ builder.add(seekpos, FormLayoutUtil.flip(cc.xyw(6, 3, 2), colSpec, orientation));
- builder.add(mplayer_thumb, cc.xyw(1, 5, 3));
- builder.add(dvdiso_thumb, cc.xyw(3, 5, 3));
+ builder.add(mplayer_thumb, FormLayoutUtil.flip(cc.xyw(1, 5, 3), colSpec, orientation));
+ builder.add(dvdiso_thumb, FormLayoutUtil.flip(cc.xyw(3, 5, 3), colSpec, orientation));
- builder.add(image_thumb, cc.xyw(1, 7, 3));
+ builder.add(image_thumb, FormLayoutUtil.flip(cc.xyw(1, 7, 3), colSpec, orientation));
- builder.addLabel(Messages.getString("FoldTab.26"), cc.xyw(1, 9, 3));
- builder.add(audiothumbnail, cc.xyw(4, 9, 4));
+ builder.addLabel(Messages.getString("FoldTab.26"), FormLayoutUtil.flip(cc.xyw(1, 9, 3), colSpec, orientation));
+ builder.add(audiothumbnail, FormLayoutUtil.flip(cc.xyw(4, 9, 4), colSpec, orientation));
- builder.addLabel(Messages.getString("FoldTab.27"), cc.xyw(1, 11, 1));
- builder.add(defaultThumbFolder, cc.xyw(4, 11, 3));
- builder.add(select, cc.xyw(7, 11, 1));
+ builder.addLabel(Messages.getString("FoldTab.27"), FormLayoutUtil.flip(cc.xyw(1, 11, 1), colSpec, orientation));
+ builder.add(defaultThumbFolder, FormLayoutUtil.flip(cc.xyw(4, 11, 3), colSpec, orientation));
+ builder.add(select, FormLayoutUtil.flip(cc.xyw(7, 11, 1), colSpec, orientation));
- cmp = builder.addSeparator(Messages.getString("NetworkTab.15"), cc.xyw(1, 13, 10));
+ cmp = builder.addSeparator(Messages.getString("NetworkTab.15"), FormLayoutUtil.flip(cc.xyw(1, 13, 10), colSpec, orientation));
cmp = (JComponent) cmp.getComponent(0);
cmp.setFont(cmp.getFont().deriveFont(Font.BOLD));
- builder.add(archive, cc.xyw(1, 15, 3));
- builder.add(hidevideosettings, cc.xyw(4, 15, 3));
- builder.add(hidetranscode, cc.xyw(8, 15, 3));
-
- builder.add(hideextensions, cc.xyw(1, 17, 3));
- builder.add(hideengines, cc.xyw(4, 17, 3));
- builder.add(hideemptyfolders, cc.xyw(8, 17, 3));
+ builder.add(archive, FormLayoutUtil.flip(cc.xyw(1, 15, 3), colSpec, orientation));
+ builder.add(hidevideosettings, FormLayoutUtil.flip(cc.xyw(4, 15, 3), colSpec, orientation));
+ builder.add(hidetranscode, FormLayoutUtil.flip(cc.xyw(8, 15, 3), colSpec, orientation));
- builder.add(itunes, cc.xyw(1, 19, 3));
- builder.add(iphoto, cc.xyw(4, 19, 3));
- builder.add(aperture, cc.xyw(8, 19, 3));
+ builder.add(hideextensions, FormLayoutUtil.flip(cc.xyw(1, 17, 3), colSpec, orientation));
+ builder.add(hideengines, FormLayoutUtil.flip(cc.xyw(4, 17, 3), colSpec, orientation));
+ builder.add(hideemptyfolders, FormLayoutUtil.flip(cc.xyw(8, 17, 3), colSpec, orientation));
- builder.add(cacheenable, cc.xy(1, 21));
- builder.add(cachereset, cc.xyw(4, 21, 4));
- builder.add(hidemedialibraryfolder, cc.xyw(8, 21, 3));
+ builder.add(itunes, FormLayoutUtil.flip(cc.xyw(1, 19, 3), colSpec, orientation));
+ builder.add(iphoto, FormLayoutUtil.flip(cc.xyw(4, 19, 3), colSpec, orientation));
+ builder.add(aperture, FormLayoutUtil.flip(cc.xyw(8, 19, 3), colSpec, orientation));
- builder.addLabel(Messages.getString("FoldTab.18"), cc.xyw(1, 23, 3));
- builder.add(sortmethod, cc.xyw(4, 23, 4));
+ builder.add(cacheenable, FormLayoutUtil.flip(cc.xy(1, 21), colSpec, orientation));
+ builder.add(cachereset, FormLayoutUtil.flip(cc.xyw(4, 21, 4), colSpec, orientation));
+ builder.add(hidemedialibraryfolder, FormLayoutUtil.flip(cc.xyw(8, 21, 3), colSpec, orientation));
+ builder.addLabel(Messages.getString("FoldTab.18"), FormLayoutUtil.flip(cc.xyw(1, 23, 3), colSpec, orientation));
+ builder.add(sortmethod, FormLayoutUtil.flip(cc.xyw(4, 23, 4), colSpec, orientation));
- cmp = builderSharedFolder.addSeparator(Messages.getString("FoldTab.7"), cc.xyw(1, 1, 6));
- cmp = (JComponent) cmp.getComponent(0);
- cmp.setFont(cmp.getFont().deriveFont(Font.BOLD));
+ builder.add(builderSharedFolder.getPanel(), FormLayoutUtil.flip(cc.xyw(1, 27, 10), colSpec, orientation));
- df = new DefaultListModel();
- File[] folders = PMS.get().getFoldersConf(false);
- if (folders != null && folders.length > 0) {
- for (File file : folders) {
- df.addElement(file.getAbsolutePath());
- }
- } else {
- df.addElement(ALL_DRIVES);
- }
- FList = new JList();
- FList.setModel(df);
- JScrollPane pane = new JScrollPane(FList);
- builderSharedFolder.add(pane, cc.xyw(1, 5, 6));
-
- builder.add(builderSharedFolder.getPanel(), cc.xyw(1, 27, 10));
+ JPanel panel = builder.getPanel();
+ // Apply the orientation to the panel and all components in it
+ panel.applyComponentOrientation(orientation);
- JPanel panel = builder.getPanel();
JScrollPane scrollPane = new JScrollPane(
panel,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
@@ -509,7 +504,6 @@ public void itemStateChanged(ItemEvent e) {
);
sortmethod = new JComboBox(kcbm);
sortmethod.setEditable(false);
-
kcbm.setSelectedKey("" + configuration.getSortMethod());
sortmethod.addItemListener(new ItemListener() {
@@ -528,13 +522,19 @@ public void itemStateChanged(ItemEvent e) {
}
private PanelBuilder initSharedFoldersGuiComponents(CellConstraints cc) {
- FormLayout layoutFolders = new FormLayout(
- "left:pref, left:pref, pref, pref, pref, 0:grow",
- "p, 3dlu, p, 3dlu, fill:default:grow"
- );
+ // Apply the orientation for the locale
+ Locale locale = new Locale(configuration.getLanguage());
+ ComponentOrientation orientation = ComponentOrientation.getOrientation(locale);
+ String colSpec = FormLayoutUtil.getColSpec(SHARED_FOLDER_COL_SPEC, orientation);
+
+ FormLayout layoutFolders = new FormLayout(colSpec, SHARED_FOLDER_ROW_SPEC);
PanelBuilder builderFolder = new PanelBuilder(layoutFolders);
builderFolder.setOpaque(true);
+ JComponent cmp = builderFolder.addSeparator(Messages.getString("FoldTab.7"), FormLayoutUtil.flip(cc.xyw(1, 1, 6), colSpec, orientation));
+ cmp = (JComponent) cmp.getComponent(0);
+ cmp.setFont(cmp.getFont().deriveFont(Font.BOLD));
+
JButton but = new JButton(LooksFrame.readImageIcon("folder_new-32.png"));
but.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
@@ -556,7 +556,7 @@ public void actionPerformed(java.awt.event.ActionEvent e) {
}
}
});
- builderFolder.add(but, cc.xy(1, 3));
+ builderFolder.add(but, FormLayoutUtil.flip(cc.xy(1, 3), colSpec, orientation));
JButton but2 = new JButton(LooksFrame.readImageIcon("button_cancel-32.png"));
//but2.setBorder(BorderFactory.createEtchedBorder());
but2.addActionListener(new java.awt.event.ActionListener() {
@@ -570,7 +570,7 @@ public void actionPerformed(java.awt.event.ActionEvent e) {
}
}
});
- builderFolder.add(but2, cc.xy(2, 3));
+ builderFolder.add(but2, FormLayoutUtil.flip(cc.xy(2, 3), colSpec, orientation));
JButton but3 = new JButton(LooksFrame.readImageIcon("kdevelop_down-32.png"));
but3.setToolTipText(Messages.getString("FoldTab.12"));
@@ -591,7 +591,7 @@ public void actionPerformed(ActionEvent e) {
}
});
- builderFolder.add(but3, cc.xy(3, 3));
+ builderFolder.add(but3, FormLayoutUtil.flip(cc.xy(3, 3), colSpec, orientation));
JButton but4 = new JButton(LooksFrame.readImageIcon("up-32.png"));
but4.setToolTipText(Messages.getString("FoldTab.12"));
// but4.setBorder(BorderFactory.createEmptyBorder());
@@ -612,7 +612,7 @@ public void actionPerformed(ActionEvent e) {
}
}
});
- builderFolder.add(but4, cc.xy(4, 3));
+ builderFolder.add(but4, FormLayoutUtil.flip(cc.xy(4, 3), colSpec, orientation));
but5 = new JButton(LooksFrame.readImageIcon("search-32.png"));
but5.setToolTipText(Messages.getString("FoldTab.2"));
@@ -650,9 +650,23 @@ public void actionPerformed(ActionEvent e) {
}
});
- builderFolder.add(but5, cc.xy(5, 3));
+ builderFolder.add(but5, FormLayoutUtil.flip(cc.xy(5, 3), colSpec, orientation));
but5.setEnabled(configuration.getUseCache());
+ df = new DefaultListModel();
+ File[] folders = PMS.get().getFoldersConf(false);
+ if (folders != null && folders.length > 0) {
+ for (File file : folders) {
+ df.addElement(file.getAbsolutePath());
+ }
+ } else {
+ df.addElement(ALL_DRIVES);
+ }
+ FList = new JList();
+ FList.setModel(df);
+ JScrollPane pane = new JScrollPane(FList);
+ builderFolder.add(pane, FormLayoutUtil.flip(cc.xyw(1, 5, 6), colSpec, orientation));
+
return builderFolder;
}
View
36 src/main/java/net/pms/newgui/StatusTab.java
@@ -18,13 +18,15 @@
*/
package net.pms.newgui;
+import java.awt.ComponentOrientation;
import java.awt.Font;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
+import java.util.Locale;
import javax.imageio.ImageIO;
import javax.swing.JComponent;
@@ -34,6 +36,8 @@
import javax.swing.JScrollPane;
import net.pms.Messages;
+import net.pms.configuration.PmsConfiguration;
+import net.pms.util.FormLayoutUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -47,6 +51,7 @@
private static final int MAX_RENDERERS = 10;
private ImagePanel imagePanel;
+ private PmsConfiguration configuration;
private ImagePanel renderers[] = new ImagePanel[MAX_RENDERERS];
private JLabel rendererLabels[] = new JLabel[MAX_RENDERERS];
private int numRenderers;
@@ -57,6 +62,10 @@
private long peak;
private DecimalFormat formatter = new DecimalFormat("#,###");
+ StatusTab(PmsConfiguration configuration) {
+ this.configuration = configuration;
+ }
+
public JProgressBar getJpb() {
return jpb;
}
@@ -70,36 +79,41 @@ public ImagePanel getImagePanel() {
}
public JComponent build() {
+ // Apply the orientation for the locale
+ Locale locale = new Locale(configuration.getLanguage());
+ ComponentOrientation orientation = ComponentOrientation.getOrientation(locale);
+ String colSpec = FormLayoutUtil.getColSpec("0:grow, pref, 0:grow", orientation);
+
FormLayout layout = new FormLayout(
- "0:grow, pref, 0:grow",
+ colSpec,
"pref, 9dlu, pref, 3dlu, pref, 15dlu, pref, 3dlu, p, 3dlu, p, 3dlu, p, 9dlu, p, 5dlu, p");
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
builder.setOpaque(true);
CellConstraints cc = new CellConstraints();
- JComponent cmp = builder.addSeparator(Messages.getString("StatusTab.2"), cc.xy(2, 1));
+ JComponent cmp = builder.addSeparator(Messages.getString("StatusTab.2"), FormLayoutUtil.flip(cc.xy(2, 1), colSpec, orientation));
cmp = (JComponent) cmp.getComponent(0);
cmp.setFont(cmp.getFont().deriveFont(Font.BOLD));
jl = new JLabel(Messages.getString("StatusTab.3"));
- builder.add(jl, cc.xy(2, 3));
+ builder.add(jl, FormLayoutUtil.flip(cc.xy(2, 3), colSpec, orientation));
imagePanel = buildImagePanel("/resources/images/connect_no-220.png");
- builder.add(imagePanel, cc.xy(2, 5, "center, fill"));
+ builder.add(imagePanel, FormLayoutUtil.flip(cc.xy(2, 5, "center, fill"), colSpec, orientation));
jpb = new JProgressBar(0, 100);
jpb.setStringPainted(true);
jpb.setString(Messages.getString("StatusTab.5"));
- builder.addLabel(Messages.getString("StatusTab.6"), cc.xy(2, 7));
- builder.add(jpb, cc.xy(2, 9));
- //builder.addLabel(Messages.getString("StatusTab.7"), cc.xy(2, 11));
+ builder.addLabel(Messages.getString("StatusTab.6"), FormLayoutUtil.flip(cc.xy(2, 7), colSpec, orientation));
+ builder.add(jpb, FormLayoutUtil.flip(cc.xy(2, 9), colSpec, orientation));
+ //builder.addLabel(Messages.getString("StatusTab.7"), FormLayoutUtil.flip(cc.xy(2, 11), colSpec, orientation));
jio = new JLabel(Messages.getString("StatusTab.8"));
- builder.add(jio, cc.xy(2, 13));
+ builder.add(jio, FormLayoutUtil.flip(cc.xy(2, 13), colSpec, orientation));
- cmp = builder.addSeparator(Messages.getString("StatusTab.9"), cc.xy(2, 15));
+ cmp = builder.addSeparator(Messages.getString("StatusTab.9"), FormLayoutUtil.flip(cc.xy(2, 15), colSpec, orientation));
cmp = (JComponent) cmp.getComponent(0);
cmp.setFont(cmp.getFont().deriveFont(Font.BOLD));
@@ -118,6 +132,10 @@ public JComponent build() {
builder.add(rendererBuilder.getPanel(), cc.xy(2, 17));
JPanel panel = builder.getPanel();
+
+ // Apply the orientation to the panel and all components in it
+ panel.applyComponentOrientation(orientation);
+
JScrollPane scrollPane = new JScrollPane(
panel,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
View
16 src/main/java/net/pms/newgui/TracesTab.java
@@ -19,6 +19,7 @@
package net.pms.newgui;
import java.awt.Color;
+import java.awt.ComponentOrientation;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
@@ -28,6 +29,7 @@
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
+import java.util.Locale;
import javax.swing.JButton;
import javax.swing.JComponent;
@@ -38,7 +40,9 @@
import javax.swing.JTextArea;
import net.pms.Messages;
+import net.pms.configuration.PmsConfiguration;
import net.pms.logging.LoggingConfigFileLoader;
+import net.pms.util.FormLayoutUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -49,6 +53,7 @@
public class TracesTab {
private static final Logger logger = LoggerFactory.getLogger(TracesTab.class);
+ private PmsConfiguration configuration;
class PopupTriggerMouseListener extends MouseAdapter {
private JPopupMenu popup;
@@ -79,13 +84,22 @@ public void mouseReleased(MouseEvent e) {
}
private JTextArea jList;
+ TracesTab(PmsConfiguration configuration) {
+ this.configuration = configuration;
+ }
+
public JTextArea getList() {
return jList;
}
public JComponent build() {
+ // Apply the orientation for the locale
+ Locale locale = new Locale(configuration.getLanguage());
+ ComponentOrientation orientation = ComponentOrientation.getOrientation(locale);
+ String colSpec = FormLayoutUtil.getColSpec("left:pref, 10:grow", orientation);
+
FormLayout layout = new FormLayout(
- "left:pref, 10:grow",
+ colSpec,
"fill:10:grow, p");
PanelBuilder builder = new PanelBuilder(layout);
// builder.setBorder(Borders.DLU14_BORDER);
View
135 src/main/java/net/pms/newgui/TranscodingTab.java
@@ -21,6 +21,7 @@
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Component;
+import java.awt.ComponentOrientation;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -31,6 +32,7 @@
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
+import java.util.Locale;
import javax.swing.BorderFactory;
import javax.swing.JButton;
@@ -57,6 +59,7 @@
import net.pms.configuration.PmsConfiguration;
import net.pms.encoders.Player;
import net.pms.encoders.PlayerFactory;
+import net.pms.util.FormLayoutUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -69,11 +72,23 @@
public class TranscodingTab {
private static final Logger LOGGER = LoggerFactory.getLogger(TranscodingTab.class);
+ private static final String COMMON_COL_SPEC = "left:pref, 2dlu, pref:grow";
+ private static final String COMMON_ROW_SPEC = "p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 9dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 9dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 9dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p, 2dlu, p";
+ private static final String EMPTY_COL_SPEC = "left:pref, 2dlu, pref:grow";
+ private static final String EMPTY_ROW_SPEC = "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p , 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 20dlu, p, 3dlu, p, 3dlu, p";
+ private static final String LEFT_COL_SPEC = "left:pref, pref, pref, pref, 0:grow";
+ private static