Translation German + Translation Helper

Programmers discuss here anything related to FreeOrion programming. Primarily for the developers to discuss.

Moderator: Committer

Post Reply
Message
Author
Lathanda
Space Floater
Posts: 24
Joined: Mon Feb 08, 2010 9:35 pm
Location: Germany, Pfarrkirchen

Translation German + Translation Helper

#1 Post by Lathanda » Mon Apr 26, 2010 4:51 am

I completed a german translation, now available with de_stringtable.txt.
(22.4.2010 6 Keys are not translated, in the svn)
I'll update de_stringtable.txt with every package of files to commit i send geoff

I wrote my self a little java class allowing to add new entries and resorting the translated file to the english key order, in order to reach a complete translation.
Perhaps some people doing translations may find it usefull.
Change it at will, no guarantees:

Code: Select all

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.util.Properties;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;


public class MainWindow extends JFrame implements ActionListener {
    public static void main(String[] args) {
	new MainWindow();
    }
    private JButton btnMerge;
    private JLabel lblResult;
    private JLabel lblPrimary;
    private JTextField txtPrimary;
    private JLabel lblSecondary;
    private JTextField txtSecondary;
    private JLabel lblTarget;
    private JTextField txtTarget;

    private MainWindow() {
	setLayout(new GridLayout(4,2));
	btnMerge     = new JButton("merge");
	btnMerge.addActionListener(this);
	lblResult = new JLabel("new entries: ?");
	lblPrimary   = new JLabel("nativ file (used for comments and structure)");
	lblSecondary = new JLabel("foreign file (used for translations)");
	lblTarget    = new JLabel("target file (will be overwritten)");
	txtPrimary   = new JTextField("D:/FreeOrion_SDK/FreeOrion/default/eng_stringtable.txt");
	txtSecondary = new JTextField("D:/FreeOrion_SDK/FreeOrion/default/de_stringtable.txt");
	txtTarget    = new JTextField("C:/Temp/test.txt");
	getContentPane().add(lblPrimary);
	getContentPane().add(txtPrimary);
	getContentPane().add(lblSecondary);
	getContentPane().add(txtSecondary);
	getContentPane().add(lblTarget);
	getContentPane().add(txtTarget);
	getContentPane().add(btnMerge);
	getContentPane().add(lblResult);

	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	pack();
	setVisible(true);
	
    }
   
    public void actionPerformed(ActionEvent ae) {
	try {
	    lblResult.setText("new entries: " + merge( 
	        new FileReader(txtPrimary.getText()),
	        new FileReader(txtSecondary.getText()),
	        new FileWriter(txtTarget.getText())
	    ));
	} catch (IOException e) {
	    e.printStackTrace();
	}
    }
    public int merge( Reader a, Reader b, Writer c) throws IOException {
	BufferedReader ba = new BufferedReader(a);
	BufferedReader bb = new BufferedReader(b);
	int count = 0;
	String key   = "";
	String value = "";
	String line  = "";
	String comment = "";
	Properties values = new Properties();
	Properties comments = new Properties();
	boolean complete = false;
	line = bb.readLine();
	//write header
	c.write(line);
	c.write("\n");
	
	while(bb.ready()) {
	    line = bb.readLine();
	    if(line.trim().equals("")) { 
		comment = comment + line + "\n";
	    } else if(line.charAt(0) == '#') {
		comment = comment + line +"\n";
	    }else if (key.equals("")) {
		//key
		key = line.trim();
	    } else  if(line.trim().startsWith("'''")) {
		//value
		value = line;
		
		while (!value.trim().endsWith("'''") || value.trim().length() <= 3) {
		    line = bb.readLine();
		    value += "\n" + line;
		}
		complete = true;
	    } else {
		value = line;
		complete = true;
	    }
	    if (complete) {
		values.setProperty(key, value);
		comments.setProperty(key, comment);
		key     = "";
		value   = "";
		comment = "";
		complete = false;
	    }
	}
	//dicard header
	line = ba.readLine();
	
	while(ba.ready()) {
	    line = ba.readLine();
	    if(line.trim().equals("")) {
		comment = comment + line + "\n";
	    } else if(line.charAt(0) == '#') {
		comment = comment + line +"\n";
	    }else if (key.equals("")) {
		//key
		key = line.trim();
	    } else  if(line.trim().startsWith("'''")) {
		//value
		value = line;
		
		while (!value.trim().endsWith("'''") || value.trim().length() <= 3) {
		    line = ba.readLine();
		    value += "\n" + line;
		}
		complete = true;
	    } else {
		value = line;
		complete = true;
	    }
	    if (complete) {
		line = comments.getProperty(key);
		if (line == null || line.equals("")) {
		    c.write(comment);
		} else {
		    c.write(comments.getProperty(key));
		}
		c.write(key);
		c.write("\n");
		line = values.getProperty(key);
		if (line == null) {
		    c.write("TODO!" + value);
		    c.write("\n");
		    count ++;
		} else {
		    c.write(line);
		    c.write("\n");
		}
		key     = "";
		value   = "";
		comment = "";
		complete = false;
	    }
	}
	c.flush();
	return count;
    }
}

Post Reply