Revision 39367

View differences:

tags/v2_0_0_Build_2060/libraries/libInternationalization/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2

  
3
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4

  
5
    <modelVersion>4.0.0</modelVersion>
6
    <artifactId>org.gvsig.i18n</artifactId>
7
    <packaging>jar</packaging>
8
    <version>2.0.1-SNAPSHOT</version>
9
    <name>libInternationalization</name>
10
    <description>Management of texts related to a locale: 
11
    loading from resource bundles and getting the text value for the current locale</description>
12
    <parent>
13
        <groupId>org.gvsig</groupId>
14
        <artifactId>org.gvsig.maven.base.pom</artifactId>
15
        <version>1.0.8-SNAPSHOT</version>
16
    </parent>
17
    <scm>
18
        <connection>scm:svn:https://devel.gvsig.org/svn/gvsig-desktop/branches/v2_0_0_prep/libraries/libInternationalization</connection>
19
        <developerConnection>scm:svn:https://devel.gvsig.org/svn/gvsig-desktop/branches/v2_0_0_prep/libraries/libInternationalization</developerConnection>
20
        <url>https://devel.gvsig.org/redmine/projects/gvsig-desktop/repository/show/branches/v2_0_0_prep/libraries/libInternationalization</url>
21
    </scm>
22
    <repositories>
23
        <repository>
24
            <id>gvsig-public-http-repository</id>
25
            <name>gvSIG maven public HTTP repository</name>
26
            <url>http://devel.gvsig.org/m2repo/j2se</url>
27
            <releases>
28
                <enabled>true</enabled>
29
                <updatePolicy>daily</updatePolicy>
30
                <checksumPolicy>warn</checksumPolicy>
31
            </releases>
32
            <snapshots>
33
                <enabled>true</enabled>
34
                <updatePolicy>daily</updatePolicy>
35
                <checksumPolicy>warn</checksumPolicy>
36
            </snapshots>
37
        </repository>
38
    </repositories>
39
    <dependencyManagement>
40
        <dependencies>
41
            <dependency>
42
                <groupId>org.gvsig</groupId>
43
                <artifactId>org.gvsig.core.maven.dependencies</artifactId>
44
                <version>2.0.1-SNAPSHOT</version>
45
                <type>pom</type>
46
                <scope>import</scope>
47
            </dependency>
48
        </dependencies>
49
    </dependencyManagement>
50
            
51
    <dependencies>
52
        <dependency>
53
            <groupId>org.slf4j</groupId>
54
            <artifactId>slf4j-api</artifactId>
55
            <scope>compile</scope>
56
        </dependency>
57
        <dependency>
58
            <groupId>org.slf4j</groupId>
59
            <artifactId>slf4j-log4j12</artifactId>
60
            <scope>runtime</scope>
61
        </dependency>
62
        <dependency>
63
			<groupId>org.gvsig</groupId>
64
			<artifactId>org.gvsig.tools.lib</artifactId>
65
            <scope>compile</scope>	
66
		</dependency>
67
    </dependencies>
68
    <build>
69
        <sourceDirectory>src</sourceDirectory>
70
        <testSourceDirectory>src-test</testSourceDirectory>
71
        <resources>
72
            <resource>
73
                <targetPath>org/gvsig/i18n/resources/translations</targetPath>
74
                <filtering>false</filtering>
75
                <directory>${basedir}/config</directory>
76
                <includes>
77
                    <include>*.properties</include>
78
                </includes>
79
            </resource>
80
            <resource>
81
                <directory>${basedir}/resources</directory>
82
            </resource>
83
        </resources>
84
        <plugins>
85
            <plugin>
86
                <groupId>org.apache.maven.plugins</groupId>
87
                <artifactId>maven-compiler-plugin</artifactId>
88
                <configuration>
89
                    <source>1.4</source>
90
                    <target>1.4</target>
91
                    <encoding>ISO-8859-1</encoding>
92
                </configuration>
93
            </plugin>
94
        </plugins>
95
    </build>
96
    
97
    <profiles>
98
        <profile>
99
            <id>eclipse-project</id>
100
            <build>
101
                <plugins>
102
                    <plugin>
103
                        <artifactId>maven-antrun-plugin</artifactId>
104
                        <configuration>
105
                            <tasks>
106
                                <ant antfile="${basedir}/../build/ant-tasks/eclipse-tasks.xml" target="eclipse.eclipse" />
107
                            </tasks>
108
                        </configuration>
109
                        <dependencies>
110
                            <dependency>
111
                                <groupId>org.apache.ant</groupId>
112
                                <artifactId>ant-trax</artifactId>
113
                                <version>1.7.1</version>
114
                            </dependency>
115
                            <dependency>
116
                                <groupId>xalan</groupId>
117
                                <artifactId>xalan</artifactId>
118
                                <version>2.6.0</version>
119
                            </dependency>
120
                        </dependencies>
121
                    </plugin>
122
                </plugins>
123
            </build>
124
        </profile>
125
        <profile>
126
            <id>gvsig-install</id>
127
            <activation>
128
                <activeByDefault>true</activeByDefault>
129
            </activation>
130
            <properties>
131
                <!--  gvSIG installation folder -->
132
                <gvsig.install.dir>${basedir}/../build/product</gvsig.install.dir>
133
            </properties>
134
        </profile>
135
    </profiles>
136
    <properties>
137
        <eclipse.project.name>libInternationalization</eclipse.project.name>
138
    </properties>
139
</project>
tags/v2_0_0_Build_2060/libraries/libInternationalization/resources/META-INF/services/org.gvsig.tools.library.Library
1
org.gvsig.i18n.MessagesLibrary
tags/v2_0_0_Build_2060/libraries/libInternationalization/.cvsignore
1
bin
2
bin-test
3
bin-utils
4
doc
0 5

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/src-utils-test/org/gvsig/i18n/utils/TestUtils.java
1
package org.gvsig.i18n.utils;
2

  
3
import java.io.File;
4
import java.io.IOException;
5

  
6
import junit.framework.TestCase;
7

  
8
/**
9
 * @author cesar
10
 *
11
 */
12
public class TestUtils extends TestCase {
13
	
14
	public ConfigOptions loadConfig() {
15
		ConfigOptions config = new ConfigOptions();
16
		config.setConfigFile("src-test"+File.separator+"org"+File.separator+"gvsig"+File.separator+"i18n"+File.separator+"utils"+File.separator+"config.xml");
17
		config.load();
18
		return config;
19
	}
20
	
21
	public void testConfigOptions() {
22
		ConfigOptions config = loadConfig();
23
		
24
		String databaseDir=null, basedir=null;
25
		try {
26
			databaseDir = new File("test-data/database").getCanonicalPath();
27
			basedir =  new File("test-data").getCanonicalPath();
28
		} catch (IOException e) {
29
			// TODO Auto-generated catch block
30
			e.printStackTrace();
31
		}
32
		
33
		// the values of the projects. They are pairs (dir, basename).
34
		String projectValues[]={"src/appgvSIG", "otro", "sources", "src/_fwAndami", "text", "sources"};
35
		for (int i=0; i<projectValues.length; i=i+3) {
36
			try {
37
				// set the canonical path
38
				projectValues[i]= new File(basedir+File.separator+projectValues[i]).getCanonicalPath();
39
			} catch (IOException e) {
40
				// TODO Auto-generated catch block
41
				e.printStackTrace();
42
			}
43
		}
44
		
45
		TestCase.assertEquals(databaseDir, config.databaseDir);
46
		TestCase.assertEquals(basedir, config.defaultBaseDir);
47
		TestCase.assertEquals("text", config.defaultBaseName);
48
		
49
		String languages = config.languages[0];
50
		for (int i=1; i<config.languages.length; i++) {
51
			languages=languages+";"+config.languages[i];
52
		}
53
		TestCase.assertEquals("ca;cs;de;en;es;eu;fr;gl;it;pt", languages);
54
		
55
		for (int i=0; i<config.projects.size(); i=i+3) {
56
			Project project = (Project) config.projects.get(i);
57
			TestCase.assertEquals(projectValues[i], project.dir);
58
			TestCase.assertEquals(projectValues[i+1], project.basename);
59
			TestCase.assertEquals(projectValues[i+2], project.sourceKeys);
60
		}
61
	}
62
	
63
	public void testTranslationDatabase() {
64
		ConfigOptions config = loadConfig();
65
		TranslationDatabase database = new TranslationDatabase(config);
66
		database.load();
67
		TestCase.assertEquals("A?adir Capa" , database.getTranslation("es", "Anadir_Capa"));
68
		TestCase.assertEquals("Add Layer" , database.getTranslation("en", "Anadir_Capa"));
69
		TestCase.assertEquals("Afegir Capa" , database.getTranslation("ca", "Anadir_Capa"));
70
		TestCase.assertEquals("Layer hinzuf?gen" , database.getTranslation("de", "Anadir_Capa"));
71
		TestCase.assertEquals("Ayuda" , database.getTranslation("es", "Ayuda"));
72
		TestCase.assertEquals(null , database.getTranslation("es", "test_case.clave_que_no_existe"));
73
		
74
		// add a translation
75
		database.setTranslation("es", "test_case.clave_que_no_existe", "Clave que no existe");
76
		// is it present now?
77
		TestCase.assertEquals("Clave que no existe" , database.getTranslation("es", "test_case.clave_que_no_existe"));
78
		
79
		// remove the translation
80
		database.removeTranslation("es", "test_case.clave_que_no_existe");
81
		// was really removed?
82
		TestCase.assertEquals(null , database.getTranslation("es", "test_case.clave_que_no_existe"));
83
		
84
		// add the translation again
85
		database.setTranslation("es", "test_case.clave_que_no_existe", "Clave que no existe");
86
		// save to disk
87
		database.save();
88
		// load from disk
89
		database.load();
90
		// is the translation still there?
91
		TestCase.assertEquals("Clave que no existe" , database.getTranslation("es", "test_case.clave_que_no_existe"));
92
		
93
		// remove the translation again and save to disk
94
		database.removeTranslation("es", "test_case.clave_que_no_existe");
95
		TestCase.assertEquals(null , database.getTranslation("es", "test_case.clave_que_no_existe"));
96
		TestCase.assertEquals("", database.getTranslation("es", "prueba"));
97
		database.save();
98
	}
99

  
100
	public void testKeys() {
101
		ConfigOptions config = loadConfig();
102
		Keys keys = new Keys(config);
103
		keys.load();
104
	}
105

  
106
}
0 107

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/src-utils-test/org/gvsig/i18n/utils/config.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2
<config>
3
	<!-- Aquí especificamos algunas variables de configuración -->
4
	<!-- En este fichero se muestran todas las opciones posibles, en sus valores por defecto -->
5

  
6
	<!-- Nombre base por defecto de los ficheros con las traducciones. En nuestro caso suele ser "text",
7
		de forma que los ficheros toman nombres como "text.properties", "text_en.properties". Nótese
8
		que sólo es el nombre por defecto. Cada proyecto puede especificar un baseName distinto -->
9
	<variable name="basename" value="text" />
10

  
11
	<!-- Directorio base. Las rutas relativas especificadas en otras variables (databaseDir, directorios
12
		de proyecto) tomarán este directorio como directorio base.  Por defecto es el directorio
13
		desde el que se llama a la aplicación -->
14
	<variable name="basedir" value="test-data" />
15

  
16
	<!-- Lista de idiomas que se tendrán en cuenta  -->
17
	<variable name="languages" value="ca;cs;de;en;es;eu;fr;gl;it;pt" />
18
	
19
	<!-- El directorio que contendrá la base de datos de traducciones por idioma. Por defecto es el
20
		directorio "database", relativo al directorio especificado en la variable "basedir".  -->
21
	<variable name="databaseDir" value="database" />
22
	
23
		<!-- El directorio por defecto que contendrá los property files que almacenan las claves de cada
24
	 proyecto". Esto se usa en los proyectos que no especifican un atributo "propertyDir". Si el
25
	 directorio no es absoluto, entonces es relativo al directorio de cada proyecto. -->
26
	<variable name="defaultPropertyDir" value="config" />
27
	
28
	<variable name="sourceKeys" value="sources" />
29
</config>
30
<projects>
31
	<!-- Los proyectos que se van a leer. Es necesario especificar un directorio (relativo o absoluto),
32
		y opcionalmente se puede incluir un atributo "basename" para especificar un nombre base
33
		distinto del nombre base por defecto -->
34
	<!-- The projects which are going to be read. An absolute or relative directory name must be specified,
35
		in which the property files are located. An optional "basename" attribute is also accepted,
36
		to override the default basename -->
37
	<project dir="src/appgvSIG" basename="otro"  sourceKeys="sources" propertyDir="config" />
38
	<project dir="src/_fwAndami" />
39
</projects>
0 40

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/src-utils-test/org/gvsig/i18n/utils/TestProperties.java
1
package org.gvsig.i18n.utils;
2

  
3
import java.io.File;
4
import java.io.FileInputStream;
5
import java.io.FileNotFoundException;
6
import java.io.FileOutputStream;
7
import java.io.IOException;
8
import java.io.InputStream;
9
import java.io.OutputStream;
10

  
11
import junit.framework.TestCase;
12

  
13
/**
14
 * @author cesar
15
 *
16
 */
17
public class TestProperties extends TestCase {
18
	static final String fileName = "TestProperties-file";
19
	InputStream is;
20
	OutputStream os;
21
	
22
	public void initOutputStream() {
23
		try {
24
			os = new FileOutputStream(fileName);
25
		} catch (FileNotFoundException e) {
26
			TestCase.fail(e.getLocalizedMessage());
27
		}
28
	}
29
	
30
	public void discardOutputStream() {
31
		try {
32
			os.close();
33
			File file = new File(fileName);
34
			file.delete();
35
		} catch (IOException e) {
36
			TestCase.fail(e.getLocalizedMessage());
37
		}
38
	}
39
	
40
	public void initInputStream() {
41
		try {
42
			is = new FileInputStream(fileName);
43
		} catch (FileNotFoundException e) {
44
			TestCase.fail(e.getLocalizedMessage());
45
		}
46
	}
47
	
48
	public void discardInputStream() {
49
		try {
50
			is.close();
51
		} catch (IOException e) {
52
			TestCase.fail(e.getLocalizedMessage());
53
		}
54
	}
55
	
56
	public void testOrderedPropertiesBasic() {
57
		// write file
58
		OrderedProperties props1 = new OrderedProperties();
59
		props1.setProperty("prueba", "hola");
60
		props1.setProperty("prueba2", "holas");
61
		props1.setProperty("abrir", "cerrar");
62
		props1.setProperty("puerta", "hembrilla");
63
		props1.setProperty("12libros", "quijote");
64
		props1.setProperty("ca?uto", "\u20acuropeo");
65
		props1.setProperty("confli=cto", "amigo");
66
		props1.setProperty("  confli =  :cto mayor ", " peque?o conflicto");
67
		initOutputStream();
68
		try {
69
			props1.store(os, "header");
70
		} catch (IOException e) {
71
			TestCase.fail(e.getLocalizedMessage());
72
		}
73
		
74
		// read file
75
		OrderedProperties props2 = new OrderedProperties();
76
		initInputStream();
77
		try {
78
			props2.load(is);
79
		} catch (IOException e) {
80
			TestCase.fail(e.getLocalizedMessage());
81
		}
82
		TestCase.assertEquals("\u20acuropeo", props2.getProperty("ca?uto"));
83
		TestCase.assertEquals("amigo", props2.getProperty("confli=cto"));
84
		TestCase.assertEquals(" peque?o conflicto", props2.getProperty("  confli =  :cto mayor "));
85
		TestCase.assertEquals("hola", props2.getProperty("prueba"));
86
		TestCase.assertEquals("holas", props2.getProperty("prueba2"));
87
		TestCase.assertEquals("cerrar", props2.getProperty("abrir"));
88
		TestCase.assertEquals("hembrilla", props2.getProperty("puerta"));
89
		TestCase.assertEquals("quijote", props2.getProperty("12libros"));
90
		discardInputStream();
91
		discardOutputStream();
92
	}
93

  
94
	
95
	public void testOrderedProperties() {
96
		// write file
97
		OrderedProperties props1 = new OrderedProperties();
98
		props1.setProperty("prueba", "hola");
99
		props1.setProperty("prueba2", "holas");
100
		props1.setProperty("ca?uto", "\u20acuropeo");
101
		props1.setProperty("confli=cto", "amigo");
102
		props1.setProperty("  conflis =  :cto mayor ", " peque?o conflicto");
103
		props1.setProperty("abrir", "cerrar");
104
		props1.setProperty("puerta", "hembrilla");
105
		props1.setProperty("12libros", "quijote");
106
		initOutputStream();
107
		try {
108
			props1.store(os, "header", "8859_15");
109
		} catch (IOException e) {
110
			TestCase.fail(e.getLocalizedMessage());
111
		}
112
		
113
		// read file
114
		OrderedProperties props2 = new OrderedProperties();
115
		initInputStream();
116
		try {
117
			props2.load(is, "8859_15");
118
		} catch (IOException e) {
119
			TestCase.fail(e.getLocalizedMessage());
120
		}
121
		// estos deber?an salir igual
122
		TestCase.assertEquals("hola", props2.getProperty("prueba"));
123
		TestCase.assertEquals("holas", props2.getProperty("prueba2"));
124
		TestCase.assertEquals("cerrar", props2.getProperty("abrir"));
125
		TestCase.assertEquals("hembrilla", props2.getProperty("puerta"));
126
		TestCase.assertEquals("quijote", props2.getProperty("12libros"));
127
		// con estos en cambio no obtenemos los mismos valores que escribimos anteriormente. Es normal, porque incluimos
128
		// caracteres especiales como ":" y "=". Para manejarlos correctamente necesitamos usas los m?todos load/store
129
		// sin encoding, los cuales s? escapan los caracteres especiales
130
		TestCase.assertEquals("\u20acuropeo", props2.getProperty("ca?uto"));
131
		TestCase.assertEquals("cto=amigo", props2.getProperty("confli"));
132
		TestCase.assertEquals(":cto mayor = peque?o conflicto", props2.getProperty("conflis"));
133

  
134
		discardInputStream();
135
		discardOutputStream();
136
		
137
		// write file
138
		props1 = new OrderedProperties();
139
		props1.setProperty("Prueba", "hola");
140
		props1.setProperty("prueba2", "holas");
141
		props1.setProperty("ca?uto", "\u20acuropeo");
142
		props1.setProperty("confli=cto", "amigo");
143
		props1.setProperty("  conflis =  :cto mayor ", " peque?o conflicto");
144
		props1.setProperty("abrir", "cerrar");
145
		props1.setProperty("puerta", "hembrilla");
146
		props1.setProperty("12libros", "quijote");
147
		initOutputStream();
148
		try {
149
			props1.store(os, "header", "UTF8");
150
		} catch (IOException e) {
151
			TestCase.fail(e.getLocalizedMessage());
152
		}
153
		
154
		// read file
155
		props2 = new OrderedProperties();
156
		initInputStream();
157
		try {
158
			props2.load(is, "UTF8");
159
		} catch (IOException e) {
160
			TestCase.fail(e.getLocalizedMessage());
161
		}
162
		// estos deber?an salir igual
163
		TestCase.assertEquals("hola", props2.getProperty("Prueba"));
164
		TestCase.assertEquals("holas", props2.getProperty("prueba2"));
165
		TestCase.assertEquals("cerrar", props2.getProperty("abrir"));
166
		TestCase.assertEquals("hembrilla", props2.getProperty("puerta"));
167
		TestCase.assertEquals("quijote", props2.getProperty("12libros"));
168
		// con estos en cambio no obtenemos los mismos valores que escribimos anteriormente. Es normal, porque incluimos
169
		// caracteres especiales como ":" y "=". Para manejarlos correctamente necesitamos usas los m?todos load/store
170
		// sin encoding, los cuales s? escapan los caracteres especiales
171
		TestCase.assertEquals("\u20acuropeo", props2.getProperty("ca?uto"));
172
		TestCase.assertEquals("cto=amigo", props2.getProperty("confli"));
173
		TestCase.assertEquals(":cto mayor = peque?o conflicto", props2.getProperty("conflis"));
174

  
175
		discardInputStream();
176
		discardOutputStream();
177
	}
178
	
179
}
0 180

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/src-test/org/gvsig/i18n/AllTests.java
1
package org.gvsig.i18n;
2

  
3
import junit.framework.Test;
4
import junit.framework.TestSuite;
5

  
6
public class AllTests {
7

  
8
	public static Test suite() {
9
		TestSuite suite = new TestSuite("Test for org.gvsig.i18n");
10
		//$JUnit-BEGIN$
11
		suite.addTestSuite(TestMessages.class);
12
		//$JUnit-END$
13
		return suite;
14
	}
15

  
16
}
0 17

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/src-test/org/gvsig/i18n/dataset1/text_fr.properties
1
#text_fr.properties
2
aceptar=Accepter
3
Cascada=Cascade
4
Configurar=Configurer
0 5

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/src-test/org/gvsig/i18n/dataset1/text.properties
1
#text.properties
2
aceptar=Aceptar
3
cancelar=Cancelar
4
Cascada=Cascada
5
cascada_enable=Debe haber al menos una ventana abierta
0 6

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/src-test/org/gvsig/i18n/dataset1/text_en.properties
1
#text_en.properties
2
aceptar=OK
3
cancelar=Cancel
4
Cascada=Cascade
5
ventana=Window
6
otro=other
0 7

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/src-test/org/gvsig/i18n/TestMessages.java
1
/**
2
 * 
3
 */
4
package org.gvsig.i18n;
5

  
6
import java.io.File;
7
import java.net.MalformedURLException;
8
import java.util.ArrayList;
9
import java.util.Locale;
10

  
11
import junit.framework.TestCase;
12

  
13
/**
14
 * @author cesar
15
 *
16
 */
17
public class TestMessages extends TestCase {
18

  
19
	/*
20
	 * @see TestCase#setUp()
21
	 */
22
	protected void setUp() throws Exception {
23
		super.setUp();
24
	}
25

  
26
	/*
27
	 * @see TestCase#tearDown()
28
	 */
29
	protected void tearDown() throws Exception {
30
		super.tearDown();
31
	}
32
	
33
	public void testSetPreferredLocales() {
34
		setPreferredLocales();
35
		removeLocales();
36
	}
37
	
38
	private void setPreferredLocales() {
39
		ArrayList preferred = new ArrayList();
40
		preferred.add(new Locale("en"));
41
		preferred.add(new Locale("es"));
42
		Messages.setPreferredLocales(preferred);
43
		ArrayList resultPref = Messages.getPreferredLocales();
44
		
45
		TestCase.assertEquals(resultPref.size(), 2);
46
		
47
		Locale lang1 = (Locale) resultPref.get(0);		
48
		TestCase.assertEquals(lang1.getLanguage(), "en");
49
		Locale lang2 = (Locale) resultPref.get(1);		
50
		TestCase.assertEquals(lang2.getLanguage(), "es");
51
	}
52

  
53
	private void removeLocales() {	
54
		Locale lang1 = new Locale("en");
55
		Locale lang2 = new Locale("es");	
56
		ArrayList resultPref = Messages.getPreferredLocales();
57
		Messages.removeLocale(lang1);
58
		TestCase.assertEquals(resultPref.size(), 1);
59
		Messages.removeLocale(lang2);		
60
		TestCase.assertEquals(resultPref.size(), 0);
61
	}
62
	
63
	public void testAddResourceFamily() {
64
		setPreferredLocales();
65
		//this.getClass().getClassLoader().getResource("text_en.properties");
66

  
67
		try {
68
			Messages.addResourceFamily("text", new File("src-test/org/gvsig/i18n/dataset1/"));
69
		} catch (MalformedURLException e) {
70
			TestCase.fail("Fichero de recursos no encontrado");
71
		}
72
		TestCase.assertEquals(5, Messages.size(new Locale("en")));
73
		TestCase.assertEquals(4,Messages.size(new Locale("es")));
74
		TestCase.assertEquals(0,Messages.size(new Locale("fr")));
75
		
76
		TestCase.assertEquals("OK", Messages.getText("aceptar"));
77
		TestCase.assertEquals("Cancel", Messages.getText("cancelar"));
78
		TestCase.assertEquals("Cascade", Messages.getText("Cascada"));
79
		TestCase.assertEquals("Window", Messages.getText("ventana"));
80
		TestCase.assertEquals("Debe haber al menos una ventana abierta", Messages.getText("cascada_enable"));
81
		TestCase.assertEquals("Configurar", Messages.getText("Configurar"));
82
		TestCase.assertEquals(null, Messages.getText("Configurar", false));
83

  
84
		// load another file now
85
		try {
86
			Messages.addResourceFamily("text", new File(
87
                    "src-test/org/gvsig/i18n/dataset2/"));
88
		} catch (MalformedURLException e) {
89
			TestCase.fail("Fichero de recursos no encontrado");
90
		}
91
		// check that the right amount of translations was loaded
92
		TestCase.assertEquals(7, Messages.size(new Locale("en")));
93
		TestCase.assertEquals(6, Messages.size(new Locale("es")));
94
		TestCase.assertEquals(0, Messages.size(new Locale("fr")));
95

  
96
		// test that keys didn't get overwritten by the new files
97
		// (only new keys should have been added for each language)
98
		TestCase.assertEquals("OK", Messages.getText("aceptar"));
99
		TestCase.assertEquals("Cancel", Messages.getText("cancelar"));
100
		TestCase.assertEquals("Cascade", Messages.getText("Cascada"));
101
		// check the new keys
102
		TestCase.assertEquals("At least one window should be open", Messages.getText("cascada_enable"));
103
		TestCase.assertEquals("Insert first corner point", Messages.getText("insert_first_point_corner"));
104
		TestCase.assertEquals("Capa exportada", Messages.getText("capa_exportada"));
105
		TestCase.assertEquals("Circunscrito", Messages.getText("circumscribed"));
106
		
107
		Messages.removeResources();
108
		TestCase.assertEquals(0, Messages.size(new Locale("en")));
109
		TestCase.assertEquals(0, Messages.size(new Locale("es")));
110
		TestCase.assertEquals(0, Messages.size(new Locale("fr")));
111
		
112
		removeLocales();
113
	}
114
}
0 115

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/src-test/org/gvsig/i18n/dataset2/text_fr.properties
1
#text_fr.properties
2
aceptar=Accepter
3
Cascada=Cascade
4
Configurar=Configurer
0 5

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/src-test/org/gvsig/i18n/dataset2/text.properties
1
#text.properties
2
aceptar=baceptar
3
cancelar=amancebar
4
capa_exportada=Capa exportada
5
circumscribed=Circunscrito
0 6

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/src-test/org/gvsig/i18n/dataset2/text_en.properties
1
#text_en.properties
2
insert_first_point_corner=Insert first corner point
3
cascada_enable=At least one window should be open
4
cancelar=arancelar
0 5

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/config/text_it.properties
1
#Translations for language [it]
2
#Tue Nov 07 12:30:01 CET 2006
3
aceptar=Accetta
4
Las_traducciones_no_pudieron_ser_cargadas=
5
No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
6
No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=
7
No_se_encontro_la_traduccion_para=Non si \u00e9 incontrata la traduzione per
0 8

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/config/text.properties
1
#Translations for language [es]
2
#Mon Oct 30 09:38:21 CET 2006
3
aceptar=Aceptar
4
Las_traducciones_no_pudieron_ser_cargadas=Las traducciones no pudieron ser cargadas
5
No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=No hay lista de idiomas preferidos. Quiza olvido inicializar la clase
6
No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=No hay lista de idiomas preferidos. Quiz\u00e1 olvid\u00f3 inicializar la clase.
7
No_se_encontro_la_traduccion_para=No se encontr\u00f3 la traducci\u00f3n para
0 8

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/config/text_en.properties
1
#Translations for language [en]
2
#Wed Nov 08 12:31:46 CET 2006
3
=\=\=\=\=\=\=
4
<<<<<<<=text_en.properties
5
>>>>>>>=1.6
6
aceptar=Accept
7
Las_traducciones_no_pudieron_ser_cargadas=Translations couldn't be loaded
8
No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=There is no list of favorite languages probably you forgot initialice the class
9
No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=There is not preferred languages list. Maybe the Messages class was not initiated
10
No_se_encontro_la_traduccion_para=Cannot find translation for
0 11

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/config/text_gl.properties
1
#Translations for language [gl]
2
#Mon Oct 30 09:38:21 CET 2006
3
aceptar=Aceptar
4
Las_traducciones_no_pudieron_ser_cargadas=As traducci\u00f3ns non se puideron cargar
5
No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
6
No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=Non se atopou a lista de idiomas preferidos.Quiz\u00e1s non se lembrou de inicializar a clase
7
No_se_encontro_la_traduccion_para=Non se atopou a traducci\u00f3n para
0 8

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/config/text_ca.properties
1
#Translations for language [ca]
2
#Mon Oct 30 09:38:21 CET 2006
3
aceptar=Acceptar
4
Las_traducciones_no_pudieron_ser_cargadas=Les traduccions no s'han pogut carregar
5
No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
6
No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=No s'ha trobat la llista d'idiomes preferits. Potser ha oblidat inicialitzar la classe
7
No_se_encontro_la_traduccion_para=No s'ha trobat la traducci\u00f3 per a
0 8

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/config/text_pt.properties
1
#Translations for language [pt]
2
#Mon Oct 30 09:38:21 CET 2006
3
aceptar=Aceitar
4
Las_traducciones_no_pudieron_ser_cargadas=
5
No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
6
No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=
7
No_se_encontro_la_traduccion_para=N\u00e3o se encontrou a tradu\u00e7\u00e3o de
0 8

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/config/text_cs.properties
1
#Translations for language [cs]
2
#Mon Oct 30 09:38:21 CET 2006
3
aceptar=Budi\u017e
4
Las_traducciones_no_pudieron_ser_cargadas=
5
No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
6
No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=
7
No_se_encontro_la_traduccion_para=Nelze nal\u00e9zt p\u0159eklad pro
0 8

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/config/text_fr.properties
1
#Translations for language [fr]
2
#Mon Oct 30 09:38:21 CET 2006
3
aceptar=Accepter
4
Las_traducciones_no_pudieron_ser_cargadas=Les traductions ne peuvent pas \u00eatre charg\u00e9es.
5
No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
6
No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=Impossible de trouver la liste des langues pr\u00e9f\u00e9r\u00e9es. Vous avez peut-\u00eatre oubli\u00e9 d'installer la classe.
7
No_se_encontro_la_traduccion_para=Impossible de trouver les traductions pour
0 8

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/config/text_de.properties
1
#Translations for language [de]
2
#Mon Oct 30 09:38:21 CET 2006
3
aceptar=OK
4
Las_traducciones_no_pudieron_ser_cargadas=
5
No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
6
No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=
7
No_se_encontro_la_traduccion_para=Konnte \u00dcbersetzung nicht finden f\u00fcr\:
0 8

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/config/text_eu.properties
1
#Translations for language [eu]
2
#Mon Oct 30 09:38:21 CET 2006
3
aceptar=Ados
4
Las_traducciones_no_pudieron_ser_cargadas=Itzulpenak ezin izan dira kargatu
5
No.hay.lista.de.idiomas.preferidos.quiza.olvido.inicializar.clase=
6
No_hay_lista_de_idiomas_preferidos_quiza_olvido_inicializar_clase=\=Ez da hobetsitako hizkuntzen zerrenda aurkitu. Agian klasea hasieratzea ahaztu zaizu
7
No_se_encontro_la_traduccion_para=Ez da itzulpenik aurkitu honetarako\:
0 8

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/src-utils/org/gvsig/i18n/utils/TranslationDatabase.java
1
/**
2
 * 
3
 */
4
package org.gvsig.i18n.utils;
5

  
6
import java.io.File;
7
import java.io.FileInputStream;
8
import java.io.FileNotFoundException;
9
import java.io.FileOutputStream;
10
import java.io.IOException;
11
import java.util.ArrayList;
12
import java.util.HashMap;
13
import java.util.Iterator;
14
import java.util.Set;
15

  
16
/**
17
 * @author cesar
18
 *
19
 */
20
public class TranslationDatabase {
21
	
22
	public TranslationDatabase(ConfigOptions config){
23
		this.config = config; 
24
	}
25
	
26
	private ConfigOptions config;
27
	private HashMap dictionaries;
28
	
29
	public void load() {
30
		// always start with an empty HashMap when loading
31
		dictionaries = new HashMap();
32
		String lang;
33
		DoubleProperties dictionary;
34
		
35
		FileInputStream stream=null;
36
		
37
		for (int currentLang=0; currentLang<config.languages.length; currentLang++) {
38
			lang = config.languages[currentLang];
39
			dictionary = new DoubleProperties();
40
			try {
41
				stream = new FileInputStream(config.databaseDir+File.separator+config.defaultBaseName+"_"+lang+".properties");
42
				try {
43
					dictionary.load(stream);
44
				} catch (IOException e) {
45
					System.err.println("Error cargando la base de datos para el idioma: ["+lang+"]. "+e.getLocalizedMessage());
46
				}
47
			} catch (FileNotFoundException e) {
48
				System.err.println("Error cargando la base de datos para el idioma: ["+lang+"]. "+e.getLocalizedMessage());
49
			}
50
			dictionaries.put(lang, dictionary);
51
		}
52
	}
53
	
54
	public void save() {
55
		String lang;
56
		DoubleProperties dictionary;
57
		
58
		FileOutputStream stream=null;
59

  
60
		for (int currentLang=0; currentLang<config.languages.length; currentLang++) {
61
			lang = config.languages[currentLang];
62
			
63
			dictionary = ((DoubleProperties)dictionaries.get(lang));
64
			
65
			try {
66
				stream = new FileOutputStream(config.databaseDir+File.separator+config.defaultBaseName+"_"+lang+".properties");
67
				try {
68
					dictionary.store(stream, "Translations for language: " + lang);
69
				} catch (IOException e) {
70
					System.err.println("Error guardando la base de datos para el idioma: ["+lang+"]. "+e.getLocalizedMessage());
71
				}
72
			} catch (FileNotFoundException e) {
73
				System.err.println("Error guardando la base de datos para el idioma: ["+lang+"]. "+e.getLocalizedMessage());
74
			}
75
		}
76
	}
77
	
78
	public String getTranslation(String lang, String key) {
79
		if (lang==null || key==null) return null;
80
		
81
		DoubleProperties dictionary = (DoubleProperties) dictionaries.get(lang);
82
		if (dictionary==null) return null;
83
		return (String) dictionary.get(key);
84
	}
85
	
86
	public String setTranslation(String lang, String key, String translation) {
87
		if (lang==null || key==null) return null;
88

  
89
		DoubleProperties dictionary = (DoubleProperties) dictionaries.get(lang);
90
		if (dictionary==null) return null;
91
		String oldvalue = (String) dictionary.get(key);
92
		dictionary.put(key, translation);
93
		return oldvalue;
94
	}
95
	
96
	/**
97
	 * Removes the key from the specified dictionary, and its associated translation.
98
	 * It has no effect if the key was not present in the dictionary.
99
	 * 
100
	 * @param lang The language from which the key should be removed.
101
	 * @param key  The key to be removed.
102
	 * @return The translation associated with the key, or null if the
103
	 * key was not present in the dictionary. It also returns null if any of the parameters is
104
	 * null, or if there was no dictionary for the specified language.
105
	 */
106
	public String removeTranslation(String lang, String key) {
107
		if (lang==null || key==null) return null;
108

  
109
		DoubleProperties dictionary = (DoubleProperties) dictionaries.get(lang);
110
		if (dictionary==null) return null;
111
		String oldvalue = (String) dictionary.get(key);
112
		dictionary.remove(key);
113
		return oldvalue;
114
	}
115
	
116
	/**
117
	 * Removes the key and its associated translation from all the dictionaries.
118
	 * The key will be deleted from the dictionaries in which it is present (if any).
119
	 * 
120
	 * @param key  The key to be removed.
121
	 * @return True if the key was removed from any dictionary, or false if the key
122
	 * was not present in any dictionary.
123
	 * @throws NullPointerException if the key is null.
124
	 */
125
	public boolean removeTranslation(String key) throws NullPointerException {
126
		DoubleProperties dictionary;
127
		String lang;
128
		boolean present=false;
129
		
130
		Set keys = dictionaries.keySet();
131
		Iterator langIterator = keys.iterator();
132
		while (langIterator.hasNext()) {
133
			lang = (String) langIterator.next();
134
			dictionary = (DoubleProperties) dictionaries.get(lang);
135
			if (dictionary.containsKey(key)) {
136
				present=true;
137
				dictionary.remove(key);
138
			}
139
		}
140
		return present;
141
	}
142
	
143
	public boolean containsLanguage(String lang) {
144
		return dictionaries.containsKey(lang);
145
	}
146

  
147
	public boolean containsKey(String lang, String key) {
148
		if (lang==null || key==null) return false;
149

  
150
		DoubleProperties dictionary = (DoubleProperties) dictionaries.get(lang);
151
		return dictionary.containsKey(key);
152
	}
153
	
154
	public String getAssociatedKey(String lang, String value) {
155
		if (lang==null || value==null) return null;
156

  
157
		DoubleProperties dictionary = (DoubleProperties) dictionaries.get(lang);
158
		return dictionary.getAssociatedKey(value);
159
	}
160
	
161
	public ArrayList getAssociatedKeys(String lang, String value) {
162
		if (lang==null || value==null) return null;
163

  
164
		DoubleProperties dictionary = (DoubleProperties) dictionaries.get(lang);
165
		return dictionary.getAssociatedKeys(value);
166
	}
167

  
168
	public boolean containsTranslation(String lang, String translation) {
169
		if (lang==null || translation==null) return false;
170

  
171
		DoubleProperties dictionary = (DoubleProperties) dictionaries.get(lang);
172
		return dictionary.containsValue(translation);
173
	}
174
}
0 175

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/src-utils/org/gvsig/i18n/utils/AddNewTranslations.java
1
/**
2
 * 
3
 */
4
package org.gvsig.i18n.utils;
5

  
6
import java.io.BufferedReader;
7
import java.io.File;
8
import java.io.FileInputStream;
9
import java.io.FileNotFoundException;
10
import java.io.IOException;
11
import java.io.InputStreamReader;
12
import java.io.UnsupportedEncodingException;
13
import java.util.Enumeration;
14
import java.util.Properties;
15

  
16
/**
17
 * @author cesar
18
 *
19
 */
20
public class AddNewTranslations {
21
	// The filename which stores the configuration (may be overriden by the command line parameter)
22
	private String configFileName = "config.xml";
23
	
24
	// Object to load and store the config options
25
	private ConfigOptions config;
26
	
27
	private TranslationDatabase database;
28

  
29
	/**
30
	 * @param args
31
	 */
32
	public static void main(String[] args) {
33
		AddNewTranslations process = new AddNewTranslations();
34
		
35
		// load command line parameters
36
		if (!process.readParameters(args)) {
37
			usage();
38
			System.exit(-1);
39
		}
40
		
41
		// transfer control to the program's main loop
42
		process.start();
43
	}
44
	
45
	private void start() {
46
		// load config options from the config file
47
		if (!loadConfig()) {
48
			System.out.println("Error leyendo el fichero de configuraci?n.");
49
			usage();
50
			System.exit(-1);
51
		}
52
		
53
		loadDataBase();
54
		
55
		readNewTranslations();
56
		
57
		database.save();
58
	}
59

  
60
	/**
61
	 *  Reads the command line parameters */
62
	private boolean readParameters(String[] args) {
63
		String configPair[];
64

  
65
		for (int i=0; i<args.length; i++) {
66
			configPair = args[i].split("=",2);
67
			if ( (configPair[0].equals("-c") || configPair[0].equals("--config"))
68
					&& configPair.length==2) {
69
				configFileName = configPair[1];
70
			}
71
			else {
72
				return false;
73
			}
74
		}
75
		return true;
76
	}
77
	
78
	private boolean loadConfig() {
79
		config = new ConfigOptions(configFileName);
80
		config.load();
81
		return true;
82
	}
83
	
84
	private static void usage() {
85
		System.out.println("Uso: AddNewTranslations [OPCION]");
86
		System.out.println("\t-c\t--config=configFile");
87
	}
88
	
89
	private void loadDataBase() {
90
		database = new TranslationDatabase(config);
91
		database.load();
92
	}
93
	
94
	private void readNewTranslations() {
95
		String lang, key, value, oldValue;
96
		
97
		for (int i=0; i<config.languages.length; i++) {
98
			lang = config.languages[i];
99
			try {
100
				FileInputStream fisProp = new FileInputStream(config.inputDir+File.separator+config.defaultBaseName+"_"+lang+".properties");
101
				Properties prop = new Properties();
102
				try {
103
					prop.load(fisProp);
104
					Enumeration keysEnum  = prop.keys();
105
					while (keysEnum.hasMoreElements()){
106
						key = (String) keysEnum.nextElement();
107
						value = prop.getProperty(key);
108
						if (value!=null && !value.equals("")) {
109
							if (!database.containsKey(lang, key)) {
110
								System.out.println("["+lang+"] Traducci?n a?adida -- "+key+"="+value);
111
								database.setTranslation(lang, key, value);
112
							}
113
							else {
114
								oldValue = database.setTranslation(lang, key, value);
115
								if (!oldValue.equals(value)) {
116
									System.out.println("["+lang+"] Traducci?n actualizada -- "+key+"="+value);
117
									System.out.println("Valor anterior: "+database.getTranslation(lang, key));
118
								}
119
							}
120
						}
121
					}
122
				} catch (IOException e) {
123
					System.err.println("Error leyendo traducciones para idioma ["+lang+"]. "+e.getLocalizedMessage());
124
				}
125
				
126
			} catch (FileNotFoundException e) {
127
				try {
128
					FileInputStream fis = new FileInputStream(config.inputDir+File.separator+config.defaultBaseName+"_"+lang+".properties-"+config.outputEncoding);
129
					
130
					BufferedReader currentFile=null;
131
					try {
132
						currentFile = new BufferedReader(new InputStreamReader(fis, config.outputEncoding));
133
					} catch (UnsupportedEncodingException e1) {
134
						// TODO Auto-generated catch block
135
						e1.printStackTrace();
136
					}
137
					
138
				    String line = null;
139
				    try {
140
						while((line = currentFile.readLine()) != null) {
141
							String[] parts = line.split("=");
142
							if (parts.length == 2) {
143
								key = parts[0];
144
								value = parts[1];
145
								if (value!=null && !value.equals("")) {
146
									if (!database.containsKey(lang, key)) {
147
										System.out.println("["+lang+"] Traducci?n a?adida -- "+key+"="+value);
148
										database.setTranslation(lang, key, value);
149
									}
150
									else {
151
										oldValue = database.setTranslation(lang, key, value);
152
										if (!oldValue.equals(value)) {
153
											System.out.println("["+lang+"] Traducci?n actualizada -- "+key+"="+value);
154
											System.out.println("Valor anterior: "+database.getTranslation(lang, key));
155
										}
156
									}
157
								}
158
							}
159
							else {
160
								System.err.println("Error leyendo traducciones para idioma ["+lang+"].");
161
								System.err.println("L?nea: "+line);
162
							}
163
						}
164
					    currentFile.close();
165
					} catch (IOException ex) {
166
						System.err.println("Error leyendo traducciones para idioma ["+lang+"]. "+ex.getLocalizedMessage());
167
					}
168
					
169
				} catch (FileNotFoundException e1) {
170
					System.out.println("Aviso -- no se encontraron nuevas traducciones para el idioma ["+lang+"].");
171
				}
172
			}
173
			
174
		}
175
		
176
	}
177
	
178
}
0 179

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/src-utils/org/gvsig/i18n/utils/config.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2
<config>
3
	<!-- Aquí especificamos algunas variables de configuración -->
4
	<!-- En este fichero se muestran todas las opciones posibles, en sus valores por defecto -->
5

  
6
	<!-- Nombre base por defecto de los ficheros con las traducciones. En nuestro caso suele ser "text",
7
		de forma que los ficheros toman nombres como "text.properties", "text_en.properties". Nótese
8
		que sólo es el nombre por defecto. Cada proyecto puede especificar un baseName distinto -->
9
	<variable name="basename" value="text" />
10

  
11
	<!-- Directorio base. Las rutas relativas especificadas en otras variables (databaseDir, directorios
12
		de proyecto) tomarán este directorio como directorio base.  Por defecto es el directorio
13
		desde el que se llama a la aplicación -->
14
	<variable name="basedir" value="../" />
15

  
16
	<!-- Lista de idiomas que se tendrán en cuenta  -->
17
	<variable name="languages" value="ca;cs;de;en;es;eu;fr;gl;it;nl;pt;pt_BR;pl;ro;sr;sw;zh;en_US" />
18
	<!-- El directorio que contendrá la base de datos general de traducciones por idioma. Por defecto es el
19
		directorio "database", relativo al directorio especificado en la variable "basedir".  -->
20
	<variable name="databaseDir" value="libInternationalization/utils-data/database" />
21
	
22
	<!-- El directorio por defecto que contendrá los property files que almacenan las claves de cada
23
	 proyecto". Esto se usa en los proyectos que no especifican un atributo "propertyDir". Si el
24
	 directorio no es absoluto, entonces es relativo al directorio de cada proyecto. -->
25
	<variable name="defaultPropertyDir" value="config" />
26
	
27
	<!-- El directorio en el que se escribirán las cadenas para enviar a traducir. -->
28
	<variable name="outputDir" value="libInternationalization/utils-data/output" />
29

  
30
	<!-- El directorio del que se leerán las nuevas cadenas traducidas, que se van a integrar
31
	a la base de datos. -->
32
	<variable name="inputDir" value="libInternationalization/utils-data/input" />
33
	
34
	<!-- Los subdirectorios que contienen fuentes, relativos a cada directorio de
35
	proyecto. Si se especifican varios subdirectorios,  deben ir separado por
36
	 punto y coma (;).  -->
37
	<variable name="srcDirs" value="src;config" />
38

  
39
	
40
	<!-- 	Esta variable especifica el origen de las claves. Los valores posibles son "sources" y "properties".
41
	     	Con esta variable se define el conjunto de valores válidos (esto es, el conjunto de claves que
42
		o bien deben estar traducidas o bien debemos enviar a traducir). El valor por defecto es "sources".
43

  
44
              - "properties" significa que el conjunto de claves válido se determinará tomando las claves
45
		presentes en el fichero .properties del idioma principal de cada proyecto. El idioma
46
		principal de un proyecto se define con el atributo "mainLang" de cada proyecto (si existe),
47
		o con la variable general "mainLang" en caso contrario.
48
	      - "sources" significa que el conjunto de claves válido se determina buscando en el código fuente del
49
		programa. Se buscarán llamadas a las funciones getText y getString y se tomarán las claves de la
50
		llamada, también se buscarán las claves presentes en el config.xml de cada extensión.
51

  
52
		Cada proyecto puede especificar un sourceKeys distinto.
53
	-->
54
	<variable name="sourceKeys" value="sources" />
55

  
56
</config>
57
<projects>
58
	<!-- Los proyectos que se van a leer. Es necesario especificar un directorio (relativo o absoluto),
59
		y opcionalmente se puede incluir un atributo "basename" para especificar un nombre base
60
		distinto del nombre base por defecto -->
61
	<!-- The projects which are going to be read. An absolute or relative directory name must be specified,
62
		in which the property files are located. An optional "basename" attribute is also accepted,
63
		to override the default basename -->
64
	<project dir="appgvSIG" basename="text" sourceKeys="sources" propertyDir="config"/>
65
	<project dir="_fwAndami" />
66
	<project dir="extAddEventTheme" />
67
	<project dir="extCAD" />
68
	<project dir="extCatalogYNomenclator" />
69
	<project dir="extCenterViewToPoint" />
70
	<project dir="extDataLocator" />
71
	<project dir="extGeoProcessing" />
72
	<project dir="extGeoprocessingExtensions" />
73
	<project dir="extGeoreferencing" />
74
	<project dir="extJDBC" />
75
	<project dir="extRasterTools" />
76
	<project dir="extScripting" />
77
	<project dir="extWCS" />
78
	<project dir="extWFS2" />
79
	<project dir="extWMS" />
80
	<project dir="libCorePlugin" />
81
	<project dir="libCq CMS for java" />
82
<!--	<project dir="libDriverManager" /> -->
83
<!--	<project dir="libDwg" /> -->
84
	<!-- <project dir="libFMap" /> -->
85
	<project dir="libInternationalization" />
86
	<project dir="libUI" />
87
	<!-- <project dir="libIverUtiles" /> -->
88
	<!-- <project dir="libRemoteServices" /> -->
89
	<project dir="extArcims" />
90
	<project dir="libArcIMS" />
91
</projects>
0 92

  
tags/v2_0_0_Build_2060/libraries/libInternationalization/src-utils/org/gvsig/i18n/utils/Project.java
1
/**
2
 * 
3
 */
4
package org.gvsig.i18n.utils;
5

  
6
import java.util.HashMap;
7

  
8
/**
9
 * Convenience class to manage the attributes of the project tag from the config.xml
10
 * file.
11
 * 
12
 * 
13
 * @author cesar
14
 *
15
 */
16
public class Project {
17

  
18
	public String dir;
19
	public String basename;
20
	
21
	/**
22
	 * The directory which stores the property files of the project.
23
	 */
24
	public String propertyDir;
25
	
26
	/**
27
	 * Source of the keys: whether they are loaded from the property files of
28
	 * the project or they are searched inside the sources.
29
	 * <ul><li>sourceKeys="sources": The keys are searched inside the Java source
30
	 * files and the config.xml files from the extensions.</li>
31
	 * <li>sourceKeys="properties": The keys are loaded from the property files
32
	 * of each project.</li></ul> 
33
	 */
34
	public String sourceKeys;
35
	
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff