Automatic Spanish to Galician translator

He creado un programa java: translator (basado en el post), que se ejecuta desde consola, para traducir textos o ficheros properties desde el castellano al gallego. Para traducir lo que se hace es mediante la libreria HttpClient de Apache, ir a la pagina web de traduccion de la Xunta, rellenar el formulario y recuperar el texto traducido. Si no estuviera activa la pagina de la Xunta, se traduciria con la pagina de Google Translator.

En el modo traduccion de texto, el texto traducido aparece por pantalla. La ejecucion puede ser:

java -jar translator-text_0.0.1.jar "Es mucho mas sencillo"
# RESPUESTA: É moito mais sinxelo

En el modo traduccion de fichero properties, el fichero traducido estara en el mismo lugar que el original pero con la terminacion _gl.property. La ejecucion puede ser:

java -jar translator-property_0.0.1.jar "/Users/xxx/long/path/Language.properties"
# RESPUESTA: sin respuesta

Cada ejecucion creara o añadira informacion al fichero de log ubicado en la carpeta donde se ejecuta: logs/translator.log.

Para crear los dos jar que ejecutan una u otra funcionalidad, en el fichero pom.xml existen dos perfiles: text y property. Las diferentes ejecuciones serian:

mvn assembly:assembly -DdescriptorId=jar-with-dependencies -P property
mvn assembly:assembly -DdescriptorId=jar-with-dependencies -P text

Los jar contienen todas sus dependencias.

Automatic Spanish to Galician translator

Java proxy connection user pass


public class Prueba{
	public static void main(String[] args) {
		try {
			String ipProxy = "";
			String portProxy = "";
			String userProxy = "";
			String passProxy = "";
			System.setProperty("http.proxyHost", ipProxy);
			System.setProperty("http.proxyPort", portProxy);
			URL url = new URL("http://www.google.es");
			URLConnection uc = url.openConnection ();
			String encoded = new String (Base64.encode(new String(userProxy + ":" + passProxy ).getBytes()));
			uc.setRequestProperty("Proxy-Authorization", "Basic " + encoded);
			uc.connect();
			InputStream is = uc.getInputStream();
			
			System.out.println(getStringFromInputStream(is));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public String getStringFromInputStream(InputStream is){
	      // TODO
	      return null;
	}
}

   public final static Boolean USE_PROXY = false;
   public final static Boolean IS_PROXY_AUTH = false;
   public final static String PROXY_USER = "";
   public final static String PROXY_PASSWORD = "";
   public final static String PROXY_SERVER ="";
   public final static Integer PROXY_PORT = null;
   
   private void configureConnection() {
       if(USE_PROXY) {
           System.setProperty("http.proxyHost", PROXY_SERVER);
           System.setProperty("http.proxyPort", Integer.toString(PROXY_PORT));
           if (IS_PROXY_AUTH) {
               Authenticator.setDefault(new Authenticator() {
                   @Override
                   protected PasswordAuthentication getPasswordAuthentication() {
                       return new PasswordAuthentication(PROXY_USER, PROXY_PASSWORD.toCharArray());
                   }
               });
           } else {
               Authenticator.setDefault(null);
           }
       }
   }
Java proxy connection user pass

Busqueda de ficheros desde la consola

# buscar en subdirectorios con grep
grep -rl "string" /path

# Busqueda en todos los jar y dentro de estos, busca un archivo xml
find webapps/ROOT/WEB-INF/lib/ -name '*.jar' -exec grep -Hls hibernate-spring.xml {} ;

# Busqueda todos los jar y dentro de estos, los xml y dentro de estos el texto: PathMatchingResourcePatternResolver
find . -name '*.jar' -exec grep -rl PathMatchingResourcePatternResolver . {} ;
Busqueda de ficheros desde la consola

List springframework classpath

in applicationContext-XX.xml

<bean id="pathMatchingResourcePatternResolver" class="org.springframework.core.io.support.PathMatchingResourcePatternResolver" />

in your class:


	@Autowired
	@Qualifier("pathMatchingResourcePatternResolver")
	private PathMatchingResourcePatternResolver path;

	public void method(...) throws Exception {

		URLClassLoader loader = (URLClassLoader) path.getClassLoader();
		for(URL url: loader.getURLs()){
			System.out.println(url.toString());
		}
		// ...

List springframework classpath

Traducir un properties de manera semiautomatica

package net.prietopalacios.josemanuel.i18n.translate;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.junit.Test;

/**
* Permite coger la parte a traducir de un properties, posteriormente inserta el texto traducido en el properties
*/
public class InternacionalizaProperties {

	@Test
	public void cogePropertiesEnGallegoYcapturasSoloElTextoATraducir_MeLoPasasEnEsteFicheroDeSalida() throws IOException{
		File salida = new File("src/test/resources/salida.txt");
		FileInputStream fis = new FileInputStream("src/test/resources/lenguaje_gl_utf-8.txt");

		BufferedReader br = new BufferedReader(new InputStreamReader(fis, "UTF-8"));
		FileWriter fw = new FileWriter(salida.getAbsoluteFile());
		BufferedWriter bw = new BufferedWriter(fw);

		while (true) {
			String line = br.readLine();
			if(line == null) break;
			if(line.contains("=")){
				String[] equals = line.split("=");
				bw.write(equals[1] + "n");
			}
		}

		bw.close();
	}

	@Test
	public void leeElFicheroSalidaAnteriorYMeLoSeparasEnBloquesDe2500Caracteres() throws IOException{
		File salida = new File("src/test/resources/salida2.txt");
		FileInputStream fis = new FileInputStream("src/test/resources/salida.txt");

		BufferedReader br = new BufferedReader(new InputStreamReader(fis, "UTF-8"));
		FileWriter fw = new FileWriter(salida.getAbsoluteFile());
		BufferedWriter bw = new BufferedWriter(fw);

		String bloque = "";
		int cont = 0;
		int contBloques = 0;
		while (true) {
			String line = br.readLine();
			if(line == null) break;
			cont += line.length();
			if(cont > 2000){
				bw.write(bloque);
				bw.write("n");
				bw.write("n");
				bw.write("n");
				contBloques++;
				cont = 0;
				bloque = line + "n";
				cont += line.length();
			}else{
				bloque += line + "n";
			}
		}
		bw.write("n");
		bw.write("Han sido " + contBloques + " bloques.");
		bw.close();
	}
	
	@Test
	/**
	 * CUIDADO: el traductor de la Xunta hay cosas que no las entiende, como | `... o el codigo html
	 *  
	 * @throws IOException
	 */
	public void elTextoTraducidoInsertaloEnUnProperties() throws IOException{
		File salida = new File("src/test/resources/Language_gl.properties");
		FileWriter fw = new FileWriter(salida.getAbsoluteFile());
		BufferedWriter bw = new BufferedWriter(fw);
		
		FileInputStream fis = new FileInputStream("src/test/resources/lenguaje_gl_utf-8.txt");
		BufferedReader original = new BufferedReader(new InputStreamReader(fis, "UTF-8"));
		FileInputStream fis2 = new FileInputStream("src/test/resources/textEnGalego.txt");
		BufferedReader traduccion = new BufferedReader(new InputStreamReader(fis2, "UTF-8"));
		
		while (true) {
			String lineaOriginal = original.readLine();
			if(lineaOriginal == null) break;
			if(lineaOriginal.contains("=")){
				String lineaTraducida = traduccion.readLine();
				String[] lineasOriginales = lineaOriginal.split("=");
				bw.write(lineasOriginales[0] + insertaTabComoEnOriginal(lineaOriginal) + "= ");
				if(lineasOriginales[1].contains(" <a id")){
					bw.write(lineasOriginales[1] + "n");
				}else{
					bw.write(lineaTraducida + "n");
				}
			}else{
				bw.write(lineaOriginal + "n");
			}
		}

		bw.close();
	}
	
	private String insertaTabComoEnOriginal(String lineaOriginal) {
		String xtab = "";
		for (int i = 0; i < cuentaTabuladores(lineaOriginal); i++) {
			xtab += "t";
		}
		return xtab;
	}

	public int cuentaTabuladores(String linea){
		int cont = 0;
		char[] array = linea.toCharArray();
		for (int i = 0; i < array.length; i++) {
			if(array[i] == '\' && array[i + 1] == 't'){
				cont++;
			}
		}	
		return cont;
	}
}
Traducir un properties de manera semiautomatica