// Path: src/main/java/io/github/bonigarcia/dualsub/util/I18N.java
// public class I18N {
// 
// 	public static final String MESSAGES = "lang/messages";
// 
// 	public static final String HTML_INIT_TAG = "<html><font face='Lucid'>";
// 
// 	public static final String HTML_END_TAG = "</font></html>";
// 
// 	public enum Html {
// 		LINK, BOLD, MONOSPACE
// 	}
// 
// 	private static I18N singleton = null;
// 
// 	private Locale locale;
// 
// 	public I18N() {
// 		this.locale = Locale.getDefault();
// 	}
// 
// 	public static I18N getSingleton() {
// 		if (singleton == null) {
// 			singleton = new I18N();
// 		}
// 		return singleton;
// 	}
// 
// 	public static String getHtmlText(String key, Html html) {
// 		String out = HTML_INIT_TAG;
// 		switch (html) {
// 		case LINK:
// 			out += "<a href='#'>" + getText(key) + "</a>";
// 			break;
// 		case BOLD:
// 			out += "<b><u>" + getText(key) + "</u></b>";
// 			break;
// 		case MONOSPACE:
// 			out += "<pre>" + getText(key) + "</pre>";
// 			break;
// 		default:
// 			out += getText(key);
// 			break;
// 		}
// 		out += HTML_END_TAG;
// 		return out;
// 	}
// 
// 	public static String getHtmlText(String key) {
// 		return HTML_INIT_TAG + getText(key) + HTML_END_TAG;
// 	}
// 
// 	public static String getText(String key) {
// 		return ResourceBundle.getBundle(MESSAGES, getLocale()).getString(key);
// 	}
// 
// 	public static Locale getLocale() {
// 		return I18N.getSingleton().locale;
// 	}
// 
// 	public static void setLocale(String locale) {
// 		I18N.getSingleton().locale = new Locale(locale);
// 	}
// 
// 	public static void setLocale(Locale locale) {
// 		I18N.getSingleton().locale = locale;
// 	}
// 
// }


import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CodingErrorAction;
import java.text.ParseException;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.TreeMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.github.bonigarcia.dualsub.util.I18N;
					(s + SrtUtils.EOL).getBytes(Charset.forName(charsetStr)));
			fileChannel.write(byteBuffer);
		}
		byteBuffer = ByteBuffer
				.wrap(SrtUtils.EOL.getBytes(Charset.forName(charsetStr)));
		fileChannel.write(byteBuffer);
		fileChannel.close();

		fileOutputStream.close();
	}

	/**
	 * Adds an entry in the end of the merged subtitles with the program author.
	 * 
	 * @param subs
	 * @throws ParseException
	 */
	private List<String> signature(boolean translate, boolean merge)
			throws ParseException {
		String lastEntryTime = (String) subtitles.keySet()
				.toArray()[subtitles.keySet().size() - 1];
		Date end = SrtUtils.getEndTime(lastEntryTime);
		final Date newDateInit = new Date(end.getTime() + signatureGap);
		final Date newDateEnd = new Date(end.getTime() + signatureTime);
		String newTime = SrtUtils.createSrtTime(newDateInit, newDateEnd);
		List<String> signature = new LinkedList<String>();
		signature.add(String.valueOf(subtitles.size() + 1));
		signature.add(newTime);
		String signatureText = "";
		if (translate & merge) {
// Path: src/main/java/io/github/bonigarcia/dualsub/util/I18N.java
// public class I18N {
// 
// 	public static final String MESSAGES = "lang/messages";
// 
// 	public static final String HTML_INIT_TAG = "<html><font face='Lucid'>";
// 
// 	public static final String HTML_END_TAG = "</font></html>";
// 
// 	public enum Html {
// 		LINK, BOLD, MONOSPACE
// 	}
// 
// 	private static I18N singleton = null;
// 
// 	private Locale locale;
// 
// 	public I18N() {
// 		this.locale = Locale.getDefault();
// 	}
// 
// 	public static I18N getSingleton() {
// 		if (singleton == null) {
// 			singleton = new I18N();
// 		}
// 		return singleton;
// 	}
// 
// 	public static String getHtmlText(String key, Html html) {
// 		String out = HTML_INIT_TAG;
// 		switch (html) {
// 		case LINK:
// 			out += "<a href='#'>" + getText(key) + "</a>";
// 			break;
// 		case BOLD:
// 			out += "<b><u>" + getText(key) + "</u></b>";
// 			break;
// 		case MONOSPACE:
// 			out += "<pre>" + getText(key) + "</pre>";
// 			break;
// 		default:
// 			out += getText(key);
// 			break;
// 		}
// 		out += HTML_END_TAG;
// 		return out;
// 	}
// 
// 	public static String getHtmlText(String key) {
// 		return HTML_INIT_TAG + getText(key) + HTML_END_TAG;
// 	}
// 
// 	public static String getText(String key) {
// 		return ResourceBundle.getBundle(MESSAGES, getLocale()).getString(key);
// 	}
// 
// 	public static Locale getLocale() {
// 		return I18N.getSingleton().locale;
// 	}
// 
// 	public static void setLocale(String locale) {
// 		I18N.getSingleton().locale = new Locale(locale);
// 	}
// 
// 	public static void setLocale(Locale locale) {
// 		I18N.getSingleton().locale = locale;
// 	}
// 
// }


// Path: src/main/java/io/github/bonigarcia/dualsub/srt/DualSrt.java
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CodingErrorAction;
import java.text.ParseException;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.TreeMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.github.bonigarcia.dualsub.util.I18N;

					(s + SrtUtils.EOL).getBytes(Charset.forName(charsetStr)));
			fileChannel.write(byteBuffer);
		}
		byteBuffer = ByteBuffer
				.wrap(SrtUtils.EOL.getBytes(Charset.forName(charsetStr)));
		fileChannel.write(byteBuffer);
		fileChannel.close();

		fileOutputStream.close();
	}

	/**
	 * Adds an entry in the end of the merged subtitles with the program author.
	 * 
	 * @param subs
	 * @throws ParseException
	 */
	private List<String> signature(boolean translate, boolean merge)
			throws ParseException {
		String lastEntryTime = (String) subtitles.keySet()
				.toArray()[subtitles.keySet().size() - 1];
		Date end = SrtUtils.getEndTime(lastEntryTime);
		final Date newDateInit = new Date(end.getTime() + signatureGap);
		final Date newDateEnd = new Date(end.getTime() + signatureTime);
		String newTime = SrtUtils.createSrtTime(newDateInit, newDateEnd);
		List<String> signature = new LinkedList<String>();
		signature.add(String.valueOf(subtitles.size() + 1));
		signature.add(newTime);
		String signatureText = "";
		if (translate & merge) {
			signatureText = I18N.getText("Merger.signatureboth.text");