diff --git a/boms/minimal/pom.xml b/boms/minimal/pom.xml
index d012299a..16dfb4dc 100644
--- a/boms/minimal/pom.xml
+++ b/boms/minimal/pom.xml
@@ -65,6 +65,11 @@
devon4j-beanmapping-orika
${project.version}
+
+ com.devonfw.java.modules
+ devon4j-i18n
+ ${project.version}
+
com.devonfw.java.modules
devon4j-security
diff --git a/modules/i18n/pom.xml b/modules/i18n/pom.xml
new file mode 100644
index 00000000..1daee873
--- /dev/null
+++ b/modules/i18n/pom.xml
@@ -0,0 +1,46 @@
+
+
+ 4.0.0
+
+ com.devonfw.java.dev
+ devon4j-modules
+ dev-SNAPSHOT
+
+ com.devonfw.java.modules
+ devon4j-i18n
+ ${devon4j.version}
+ ${project.artifactId}
+ jar
+ Module for i18n.
+
+
+
+ net.sf.m-m-m
+ mmm-util-cli
+ 7.0.0
+
+
+ net.sf.m-m-m
+ mmm-util-nls
+
+
+ com.google.code.gson
+ gson
+
+
+ commons-lang
+ commons-lang
+ 2.6
+
+
+ org.json
+ json
+
+
+ com.devonfw.java.modules
+ devon4j-test
+ test
+
+
+
\ No newline at end of file
diff --git a/modules/i18n/src/main/java/com/devonfw/module/i18n/common/api/exception/UnknownLocaleException.java b/modules/i18n/src/main/java/com/devonfw/module/i18n/common/api/exception/UnknownLocaleException.java
new file mode 100644
index 00000000..66d0b8ed
--- /dev/null
+++ b/modules/i18n/src/main/java/com/devonfw/module/i18n/common/api/exception/UnknownLocaleException.java
@@ -0,0 +1,35 @@
+package com.devonfw.module.i18n.common.api.exception;
+
+/**
+ * Signals Exception when locale is not found
+ *
+ */
+public class UnknownLocaleException extends RuntimeException {
+
+ /**
+ * Default serial version UID
+ */
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Creates a new {@link UnknownLocaleException} with the given message
+ *
+ * @param msg error message
+ */
+ public UnknownLocaleException(String msg) {
+
+ super(msg);
+ }
+
+ /**
+ * Creates a new {@link UnknownLocaleException} with the given message and the given cause
+ *
+ * @param msg error message
+ * @param ex cause of the created exception
+ */
+ public UnknownLocaleException(String msg, Throwable ex) {
+
+ super(msg, ex);
+ }
+
+}
diff --git a/modules/i18n/src/main/java/com/devonfw/module/i18n/common/api/nls/NlsBundleI18nRoot.java b/modules/i18n/src/main/java/com/devonfw/module/i18n/common/api/nls/NlsBundleI18nRoot.java
new file mode 100644
index 00000000..202cae0f
--- /dev/null
+++ b/modules/i18n/src/main/java/com/devonfw/module/i18n/common/api/nls/NlsBundleI18nRoot.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright 2015-2018 Capgemini SE.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+package com.devonfw.module.i18n.common.api.nls;
+
+import javax.inject.Named;
+
+import net.sf.mmm.util.nls.api.NlsBundle;
+import net.sf.mmm.util.nls.api.NlsBundleMessage;
+import net.sf.mmm.util.nls.api.NlsMessage;
+
+/**
+ * This is the {@link NlsBundle} for this application.
+ *
+ * @author kugawand
+ * @since dev
+ *
+ */
+
+public interface NlsBundleI18nRoot extends NlsBundle {
+ /**
+ * @param name
+ * @return
+ */
+ @SuppressWarnings("javadoc")
+ @NlsBundleMessage("{name}. This Module is related to internationalization ")
+ public NlsMessage getLocale(@Named("name") String name);
+
+ /**
+ * @param name
+ * @return
+ */
+ @SuppressWarnings("javadoc")
+ @NlsBundleMessage("Hello {name}")
+ NlsMessage messageSayHi(@Named("name") String name);
+
+ @NlsBundleMessage("Sorry. The login \"{login}\" is already in use. Please choose a different login.")
+ NlsMessage errorLoginInUse(@Named("login") String login);
+}
diff --git a/modules/i18n/src/main/java/com/devonfw/module/i18n/common/util/BundleMapSerializer.java b/modules/i18n/src/main/java/com/devonfw/module/i18n/common/util/BundleMapSerializer.java
new file mode 100644
index 00000000..ee0de52c
--- /dev/null
+++ b/modules/i18n/src/main/java/com/devonfw/module/i18n/common/util/BundleMapSerializer.java
@@ -0,0 +1,95 @@
+package com.devonfw.module.i18n.common.util;
+
+import java.io.IOException;
+import java.lang.reflect.Type;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+
+/**
+ * {@link JsonSerializer} for {@link Map}.
+ */
+public class BundleMapSerializer implements JsonSerializer
+
+
+ com.devonfw.java.modules
+ devon4j-i18n
+
diff --git a/templates/server/src/main/resources/archetype-resources/core/src/main/java/__packageInPathFormat__/general/service/impl/rest/I18nRestServiceImpl.java b/templates/server/src/main/resources/archetype-resources/core/src/main/java/__packageInPathFormat__/general/service/impl/rest/I18nRestServiceImpl.java
new file mode 100644
index 00000000..83469366
--- /dev/null
+++ b/templates/server/src/main/resources/archetype-resources/core/src/main/java/__packageInPathFormat__/general/service/impl/rest/I18nRestServiceImpl.java
@@ -0,0 +1,27 @@
+package ${package}.general.service.impl.rest;
+
+import javax.annotation.security.PermitAll;
+import javax.inject.Named;
+import javax.transaction.Transactional;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.QueryParam;
+
+import ${package}.general.service.api.rest.I18nRestService;
+import com.devonfw.module.i18n.locale.impl.I18nImpl;
+import com.devonfw.module.i18n.locale.impl.LocaleNlsResourceImpl;
+
+/**
+ * Implementation of {@link I18nRestService}.
+ */
+@Named
+@Transactional
+public class I18nRestServiceImpl implements I18nRestService {
+ @Override
+ @PermitAll
+ public String getResourcesForLocale(@PathParam("locale") String locale, @QueryParam("filter") String filter)
+ throws Exception {
+
+ return new I18nImpl(new LocaleNlsResourceImpl()).getResourceObject(locale, filter);
+ }
+
+}