diff --git a/pom.xml b/pom.xml
index ae118e9ef38a6d572f4c305f4843d64ee8650716..a9d73d881fb75d9291884ca1e59abd62f2a34665 100644
--- a/pom.xml
+++ b/pom.xml
@@ -59,6 +59,9 @@
     <contributor>
       <name>Silvia R&#237;os Berganti&#241;os</name>
     </contributor>
+    <contributor>
+      <name>Espen Bj&#248;rntvedt</name>
+    </contributor>
     <contributor>
       <name>Francesco Coccoluto</name>
     </contributor>
diff --git a/src/main/resources/assets/org/orekit/rugged/RuggedMessages_no.utf8 b/src/main/resources/assets/org/orekit/rugged/RuggedMessages_no.utf8
new file mode 100644
index 0000000000000000000000000000000000000000..081166d6863359235b650cf11054480f4313d0c6
--- /dev/null
+++ b/src/main/resources/assets/org/orekit/rugged/RuggedMessages_no.utf8
@@ -0,0 +1,47 @@
+# internal error, contact maintenance at {0}
+INTERNAL_ERROR = intern feil. Kontakt vedlikeholdsansvarlig {0}
+
+# no data at indices [{0}, {1}], tile only covers from [0, 0] to [{2}, {3}] (inclusive)
+OUT_OF_TILE_INDICES = ingen data funnet på [{0}, {1}], flisen dekker kun fra [0, 0] til [{2}, {3}] (inkludert)
+
+# no data at latitude {0} and longitude {1}, tile covers only latitudes {2} to {3} and longitudes {4} to {5}
+OUT_OF_TILE_ANGLES = ingen data på breddegrad {0} og lengdegrad {1}, flisen dekker kun breddegradene {2} til {3} og lengdegradene {4} til {5} 
+
+# the tile selected for latitude {0} and longitude {1} does not contain required point neighborhood
+TILE_WITHOUT_REQUIRED_NEIGHBORS_SELECTED = den valgte flisen for breddegrad {0} og lengdegrad {1} inneholder ikke nødvendig nabopunkt
+
+# date {0} is out of time span [{1}, {2}]
+OUT_OF_TIME_RANGE = datoen {0} er utenfor perioden [{1}, {2}]
+
+# general context has not been initialized (missing call to {0})
+UNINITIALIZED_CONTEXT = generell kontekst har ikke blitt initialisert ({0} har ikke blitt kalt)
+
+# tile is empty: {0} ⨉ {1}
+EMPTY_TILE = flisen er tom: {0} ⨉ {1}
+
+# unknown sensor {0}
+UNKNOWN_SENSOR = ukjent måler {0}
+
+# line-of-sight does not reach ground
+LINE_OF_SIGHT_DOES_NOT_REACH_GROUND = synslinjen når ikke bakken
+
+# line-of-sight never crosses latitude {0}
+LINE_OF_SIGHT_NEVER_CROSSES_LATITUDE = synslinjen krysser aldri breddegrad {0}
+
+# line-of-sight never crosses longitude {0}
+LINE_OF_SIGHT_NEVER_CROSSES_LONGITUDE = synslinjen krysser aldri lengdegrad {0}
+
+# line never crosses altitude {0}
+LINE_OF_SIGHT_NEVER_CROSSES_ALTITUDE = linjen krysser aldri høyden {0}
+
+# line-of-sight enters the Digital Elevation Model behind spacecraft!
+DEM_ENTRY_POINT_IS_BEHIND_SPACECRAFT = synslinjen går inn i den digital terrengmodellen bak romfartøyet
+
+# frame {0} does not match frame {1} from interpolator dump
+FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = rammen {0} stemmer ikke med rammen {1} fra interpolar-dumpen
+
+# data is not an interpolator dump
+NOT_INTERPOLATOR_DUMP_DATA = dataen er ikke en interpolar-dump
+
+# number of estimated parameters mismatch, expected {0} got {1}
+ESTIMATED_PARAMETERS_NUMBER_MISMATCH = <MISSING TRANSLATION>
diff --git a/src/site/markdown/index.md b/src/site/markdown/index.md
index 4409605c2b633b4ffed7ee10b6dfb2b8c01d8de5..c2c7f76ae3a36eafe347b181122f5b3c8f2b8b1b 100644
--- a/src/site/markdown/index.md
+++ b/src/site/markdown/index.md
@@ -82,6 +82,8 @@ Features
 
     * Italian
 
+    * Norwegian
+
     * Romanian
 
     * Spanish
diff --git a/src/site/xdoc/changes.xml b/src/site/xdoc/changes.xml
index c747bd2146b3d0db59512d088a9d7dc9dd464498..df750dc72905dd40e0182f3c1d7ff20de94dc625 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="Espen Bjørntvedt">
+        Added Norwegian translation of error messages.
+      </action>
       <action dev="luc" type="update">
         Updated Apache Commons Version as 3.4 has now been released.
       </action>
diff --git a/src/test/java/org/orekit/rugged/errors/RuggedMessagesTest.java b/src/test/java/org/orekit/rugged/errors/RuggedMessagesTest.java
index eb225981d281d9c34d584ce0a47042ff90e5379a..04751a2a24e131b9ee82ee480211cf9b89c51d76 100644
--- a/src/test/java/org/orekit/rugged/errors/RuggedMessagesTest.java
+++ b/src/test/java/org/orekit/rugged/errors/RuggedMessagesTest.java
@@ -35,7 +35,7 @@ public class RuggedMessagesTest {
 
     @Test
     public void testAllKeysPresentInPropertiesFiles() {
-        for (final String language : new String[] { "de", "en", "es", "fr", "gl", "it", "ro" } ) {
+        for (final String language : new String[] { "de", "en", "es", "fr", "gl", "it", "no", "ro" } ) {
             ResourceBundle bundle =
                 ResourceBundle.getBundle("assets/org/orekit/rugged/RuggedMessages",
                                          new Locale(language), new RuggedMessages.UTF8Control());
@@ -55,7 +55,7 @@ public class RuggedMessagesTest {
 
     @Test
     public void testAllPropertiesCorrespondToKeys() {
-        for (final String language : new String[] { "de", "en", "es", "fr", "gl", "it", "ro" } ) {
+        for (final String language : new String[] { "de", "en", "es", "fr", "gl", "it", "no", "ro" } ) {
             ResourceBundle bundle =
                 ResourceBundle.getBundle("assets/org/orekit/rugged/RuggedMessages",
                                          new Locale(language), new RuggedMessages.UTF8Control());
@@ -90,7 +90,7 @@ public class RuggedMessagesTest {
 
     @Test
     public void testVariablePartsConsistency() {
-        for (final String language : new String[] { "de", "en", "es", "fr", "gl", "it", "ro" } ) {
+        for (final String language : new String[] { "de", "en", "es", "fr", "gl", "it", "no", "ro" } ) {
             Locale locale = new Locale(language);
             for (RuggedMessages message : RuggedMessages.values()) {
                 MessageFormat source     = new MessageFormat(message.getSourceString());