diff --git a/aster/src/main/resources/assets/org/orekit/rugged/AsterMessages_es.utf8 b/aster/src/main/resources/assets/org/orekit/rugged/AsterMessages_es.utf8
new file mode 100644
index 0000000000000000000000000000000000000000..4cde0e84403424a1b59832e3ad9f5bb7c7cccad7
--- /dev/null
+++ b/aster/src/main/resources/assets/org/orekit/rugged/AsterMessages_es.utf8
@@ -0,0 +1,23 @@
+# no Digital Elevation Model data for point {0}, {1} (should be in file {2})
+NO_DEM_DATA_FOR_POINT = no existen datos de Modelo Digital del Terreno para los puntos {0}, {1} (deberían estar en el fichero {2})
+
+# error parsing file {0}: {1}
+ERROR_PARSING_FILE = error de lectura del fichero {0}: {1}
+
+# missing pixel scale GeoTIFF tag in file {0}
+MISSING_PIXEL_SCALE = falta la etiqueta GeoTIFF « pixel scale » en el fichero {0}
+
+# missing tie point GeoTIFF tag in file {0}
+MISSING_TIE_POINT = falta la etiqueta GeoTIFF « tie point » en el fichero {0}
+
+# unsupported GeoTIFF version {0}/{1}.{2} in file {3} (expected {4}/{5}.{6})
+UNSUPPORTED_GEOTIFF_VERSION = versión GeoTIFF {0}/{1}.{2} en el fichero {3} no reconocida (versión esperada {4}/{5}.{6})
+
+# unable to retrieve value for key {0} in file {1}
+UNABLE_TO_RETRIEVE_VALUE_FOR_KEY = no se puede recuperar el valor que corresponde a la clave {0} en el fichero {1}
+
+# unexpected GeoTIFF key {0} in file {1}
+UNEXPECTED_GEOKEY = no se reconoce la clave GeoTIFF {0} en el fichero {1}
+
+# GeoTIFF key {0} in file {1} has unexpected value {2} (expected {3})
+UNEXPECTED_GEOKEY_VALUE = no se reconoce el valor {2} correspondiente a la clave GeoTIFF {0} en el fichero {1} (valor esperado {3})
diff --git a/aster/src/main/resources/assets/org/orekit/rugged/AsterMessages_gl.utf8 b/aster/src/main/resources/assets/org/orekit/rugged/AsterMessages_gl.utf8
new file mode 100644
index 0000000000000000000000000000000000000000..26b1ec7a3a6724b067ce7e764d2481b9cda8b3fc
--- /dev/null
+++ b/aster/src/main/resources/assets/org/orekit/rugged/AsterMessages_gl.utf8
@@ -0,0 +1,23 @@
+# no Digital Elevation Model data for point {0}, {1} (should be in file {2})
+NO_DEM_DATA_FOR_POINT = non existen datos de Modelo Digital do Terreo para os puntos {0}, {1} (deberían estar no ficheiro {2})
+
+# error parsing file {0}: {1}
+ERROR_PARSING_FILE = erro de lectura do ficheiro {0}: {1}
+
+# missing pixel scale GeoTIFF tag in file {0}
+MISSING_PIXEL_SCALE = falla a etiqueta GeoTIFF « pixel scale » no ficheiro {0}
+
+# missing tie point GeoTIFF tag in file {0}
+MISSING_TIE_POINT = falla a etiqueta GeoTIFF « tie point » no ficheiro {0}
+
+# unsupported GeoTIFF version {0}/{1}.{2} in file {3} (expected {4}/{5}.{6})
+UNSUPPORTED_GEOTIFF_VERSION = versión GeoTIFF {0}/{1}.{2} no ficheiro {3} non recoñecida (versión agardada {4}/{5}.{6})
+
+# unable to retrieve value for key {0} in file {1}
+UNABLE_TO_RETRIEVE_VALUE_FOR_KEY = non se pode recupera-lo valor que corresponde á clave {0} no ficheiro {1}
+
+# unexpected GeoTIFF key {0} in file {1}
+UNEXPECTED_GEOKEY = non se recoñece a clave GeoTIFF {0} no ficheiro {1}
+
+# GeoTIFF key {0} in file {1} has unexpected value {2} (expected {3})
+UNEXPECTED_GEOKEY_VALUE = non se recoñece o valor {2} correspondente á clave GeoTIFF {0} no ficheiro {1} (valor agardado {3})
diff --git a/aster/src/test/java/org/orekit/rugged/aster/AsterMessagesTest.java b/aster/src/test/java/org/orekit/rugged/aster/AsterMessagesTest.java
index 2d7f50cb949139f47a59bd9071c0919d0701d80a..ec40a872449e4c044deb772bd9ddab6ba600c1b3 100644
--- a/aster/src/test/java/org/orekit/rugged/aster/AsterMessagesTest.java
+++ b/aster/src/test/java/org/orekit/rugged/aster/AsterMessagesTest.java
@@ -34,7 +34,7 @@ public class AsterMessagesTest {
 
     @Test
     public void testAllKeysPresentInPropertiesFiles() {
-        for (final String language : new String[] { "de", "en", "fr", "it" } ) {
+        for (final String language : new String[] { "de", "en", "es", "fr", "gl", "it" } ) {
             ResourceBundle bundle =
                 ResourceBundle.getBundle("assets/org/orekit/rugged/AsterMessages",
                                          new Locale(language), new AsterMessages.UTF8Control());
@@ -54,7 +54,7 @@ public class AsterMessagesTest {
 
     @Test
     public void testAllPropertiesCorrespondToKeys() {
-        for (final String language : new String[] { "de", "en", "fr", "it" } ) {
+        for (final String language : new String[] { "de", "en", "es", "fr", "gl", "it" } ) {
             ResourceBundle bundle =
                 ResourceBundle.getBundle("assets/org/orekit/rugged/AsterMessages",
                                          new Locale(language), new AsterMessages.UTF8Control());
@@ -89,7 +89,7 @@ public class AsterMessagesTest {
 
     @Test
     public void testVariablePartsConsistency() {
-        for (final String language : new String[] { "de", "en", "fr", "it" } ) {
+        for (final String language : new String[] { "de", "en", "es", "fr", "gl", "it" } ) {
             Locale locale = new Locale(language);
             for (AsterMessages message : AsterMessages.values()) {
                 MessageFormat source     = new MessageFormat(message.getSourceString());
diff --git a/core/src/main/resources/assets/org/orekit/rugged/RuggedMessages_es.utf8 b/core/src/main/resources/assets/org/orekit/rugged/RuggedMessages_es.utf8
new file mode 100644
index 0000000000000000000000000000000000000000..c2c88535d30224f83eeaf58016b04b3796cbf171
--- /dev/null
+++ b/core/src/main/resources/assets/org/orekit/rugged/RuggedMessages_es.utf8
@@ -0,0 +1,41 @@
+# internal error, contact maintenance at {0}
+INTERNAL_ERROR = error interno, contacte al soporte técnico en {0}
+
+# no data at indices [{0}, {1}], tile only covers from [0, 0] to [{2}, {3}] (inclusive)
+OUT_OF_TILE_INDICES = no hay datos en los índices [{0}, {1}], la faceta sólo cubre desde [0, 0] a [{2}, {3}] (inclusive)
+
+# no data at latitude {0} and longitude {1}, tile covers only latitudes {2} to {3} and longitudes {4} to {5}
+OUT_OF_TILE_ANGLES = no hay datos para la latitud {0} y la longitud {1}, la faceta sólo cubre las latitudes de {2} a {3} y las longitudes de {4} a {5}
+
+# date {0} is out of time span [{1}, {2}]
+OUT_OF_TIME_RANGE = la fecha {0} está fuera del intervalo temporal [{1}, {2}]
+
+# general context has not been initialized
+UNINITIALIZED_CONTEXT = el contexto general no ha sido inicializado
+
+# tile is empty: {0} ⨉ {1}
+EMPTY_TILE = la faceta está vacía: {0} ⨉ {1}
+
+# unknown sensor {0}
+UNKNOWN_SENSOR = sensor {0} desconocido
+
+# line-of-sight does not reach ground
+LINE_OF_SIGHT_DOES_NOT_REACH_GROUND = la línea de visión no llega al suelo
+
+# line-of-sight never crosses latitude {0}
+LINE_OF_SIGHT_NEVER_CROSSES_LATITUDE = la línea de visión nunca atraviesa la latitud {0}
+
+# line-of-sight never crosses longitude {0}
+LINE_OF_SIGHT_NEVER_CROSSES_LONGITUDE = la línea de visión nunca atraviesa la longitud {0}
+
+# line never crosses altitude {0}
+LINE_OF_SIGHT_NEVER_CROSSES_ALTITUDE = la línea de visión nunca atraviesa la altitud {0}
+
+# line-of-sight enters the Digital Elevation Model behind spacecraft!
+DEM_ENTRY_POINT_IS_BEHIND_SPACECRAFT = ¡ la línea de visión entra en el Modelo Digital del Terreno por detrás del satélite !
+
+# frame {0} does not match frame {1} from interpolator dump
+FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = el sistema de referencia {0} no corresponde con el sistema de referencia {1} del volcado de datos del interpolador
+
+# data is not an interpolator dump
+NOT_INTERPOLATOR_DUMP_DATA = los datos no están en el volcado de datos del interpolador
diff --git a/core/src/main/resources/assets/org/orekit/rugged/RuggedMessages_gl.utf8 b/core/src/main/resources/assets/org/orekit/rugged/RuggedMessages_gl.utf8
new file mode 100644
index 0000000000000000000000000000000000000000..b697164b9eedbad6f60bf4890e8e74773f7e87ef
--- /dev/null
+++ b/core/src/main/resources/assets/org/orekit/rugged/RuggedMessages_gl.utf8
@@ -0,0 +1,41 @@
+# internal error, contact maintenance at {0}
+INTERNAL_ERROR = erro interno, contacte co soporte técnico no {0}
+
+# no data at indices [{0}, {1}], tile only covers from [0, 0] to [{2}, {3}] (inclusive)
+OUT_OF_TILE_INDICES = non hai datos nos índices [{0}, {1}], a faceta só cubre dende [0, 0] a [{2}, {3}] (inclusive)
+
+# no data at latitude {0} and longitude {1}, tile covers only latitudes {2} to {3} and longitudes {4} to {5}
+OUT_OF_TILE_ANGLES = non hai datos para a latitude {0} e a lonxitude {1}, a faceta só cubre as latitudes de {2} a {3} e as lonxitudes de {4} a {5}
+
+# date {0} is out of time span [{1}, {2}]
+OUT_OF_TIME_RANGE = a data {0} está fora do intervalo temporal [{1}, {2}]
+
+# general context has not been initialized
+UNINITIALIZED_CONTEXT = o contexto xeral non foi inicializado
+
+# tile is empty: {0} ⨉ {1}
+EMPTY_TILE = a faceta está baleira: {0} ⨉ {1}
+
+# unknown sensor {0}
+UNKNOWN_SENSOR = sensor {0} descoñecido
+
+# line-of-sight does not reach ground
+LINE_OF_SIGHT_DOES_NOT_REACH_GROUND = a liña de visión non chega ao chan
+
+# line-of-sight never crosses latitude {0}
+LINE_OF_SIGHT_NEVER_CROSSES_LATITUDE = a liña de visión xamais atravesa a latitude {0}
+
+# line-of-sight never crosses longitude {0}
+LINE_OF_SIGHT_NEVER_CROSSES_LONGITUDE = a liña de visión xamais atravesa a longitude {0}
+
+# line never crosses altitude {0}
+LINE_OF_SIGHT_NEVER_CROSSES_ALTITUDE = a liña de visión xamais atravesa a altitude {0}
+
+# line-of-sight enters the Digital Elevation Model behind spacecraft!
+DEM_ENTRY_POINT_IS_BEHIND_SPACECRAFT = ¡ a liña de visión entra no Modelo Dixital do Terren por detrás do satélite !
+
+# frame {0} does not match frame {1} from interpolator dump
+FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = o sistema de referencia {0} non corresponde co sistema de referencia {1} do baleirado de datos do interpolador
+
+# data is not an interpolator dump
+NOT_INTERPOLATOR_DUMP_DATA = os datos non están no baleirado de datos do interpolador
diff --git a/core/src/test/java/org/orekit/rugged/api/RuggedMessagesTest.java b/core/src/test/java/org/orekit/rugged/api/RuggedMessagesTest.java
index c9e9be4985a9bbb34d05f91e51ea43ec74aac973..203d053ed5a92c86da5eef625619c97fb7b60026 100644
--- a/core/src/test/java/org/orekit/rugged/api/RuggedMessagesTest.java
+++ b/core/src/test/java/org/orekit/rugged/api/RuggedMessagesTest.java
@@ -34,7 +34,7 @@ public class RuggedMessagesTest {
 
     @Test
     public void testAllKeysPresentInPropertiesFiles() {
-        for (final String language : new String[] { "de", "en", "fr", "it" } ) {
+        for (final String language : new String[] { "de", "en", "es", "fr", "gl", "it" } ) {
             ResourceBundle bundle =
                 ResourceBundle.getBundle("assets/org/orekit/rugged/RuggedMessages",
                                          new Locale(language), new RuggedMessages.UTF8Control());
@@ -54,7 +54,7 @@ public class RuggedMessagesTest {
 
     @Test
     public void testAllPropertiesCorrespondToKeys() {
-        for (final String language : new String[] { "de", "en", "fr", "it" } ) {
+        for (final String language : new String[] { "de", "en", "es", "fr", "gl", "it" } ) {
             ResourceBundle bundle =
                 ResourceBundle.getBundle("assets/org/orekit/rugged/RuggedMessages",
                                          new Locale(language), new RuggedMessages.UTF8Control());
@@ -89,7 +89,7 @@ public class RuggedMessagesTest {
 
     @Test
     public void testVariablePartsConsistency() {
-        for (final String language : new String[] { "de", "en", "fr", "it" } ) {
+        for (final String language : new String[] { "de", "en", "es", "fr", "gl", "it" } ) {
             Locale locale = new Locale(language);
             for (RuggedMessages message : RuggedMessages.values()) {
                 MessageFormat source     = new MessageFormat(message.getSourceString());
diff --git a/pom.xml b/pom.xml
index 873586735cb91f350b732532fe8dfb57bd364334..0bf3177b346195c2704854f26c6bf59e13c820ce 100644
--- a/pom.xml
+++ b/pom.xml
@@ -53,6 +53,9 @@
   </developers>
 
   <contributors>
+    <contributor>
+      <name>Silvia R&#237;os Berganti&#241;os</name>
+    </contributor>
     <contributor>
       <name>Francesco Coccoluto</name>
     </contributor>
@@ -62,6 +65,9 @@
     <contributor>
       <name>Marina Ludwig</name>
     </contributor>
+    <contributor>
+      <name>Beatriz Salazar</name>
+    </contributor>
   </contributors>
 
   <organization>
diff --git a/src/site/markdown/index.md b/src/site/markdown/index.md
index 52103fc421e908d3afc66ac33e197a8f1431f48a..9c9d55ecbe49c4f1b22036febcef11f43dbe8bf7 100644
--- a/src/site/markdown/index.md
+++ b/src/site/markdown/index.md
@@ -71,10 +71,14 @@ Features
 
     * French
 
+    * Galician
+
     * German
 
     * Italian
 
+    * Spanish
+
 Free software
 -------------
 
diff --git a/src/site/xdoc/changes.xml b/src/site/xdoc/changes.xml
index 429c49033a1d4b6f1232d205a50cb059b6ec13fe..b9b33c676f46724b58dfe84d57a70e71c8fc0c8e 100644
--- a/src/site/xdoc/changes.xml
+++ b/src/site/xdoc/changes.xml
@@ -22,6 +22,9 @@
   <body>
     <release version="1.0" date="TBD"
              description="TBD">
+      <action dev="luc" type="add" due-to="Silvia Ríos Bergantiños and Beatriz Salazar">
+        Added Spanish and Galician translations of error messages.
+      </action>
       <action dev="luc" type="add" due-to="Marina Ludwig">
         Added German translation of error messages.
       </action>