diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/PatchSetReviewer.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/PatchSetReviewer.java
index 68e02d4..1a73e46 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/PatchSetReviewer.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/PatchSetReviewer.java
@@ -4,6 +4,7 @@
 import com.google.inject.Provider;
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
 import com.googlesource.gerrit.plugins.chatgpt.data.ChangeSetDataHandler;
+import com.googlesource.gerrit.plugins.chatgpt.localization.Localizer;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClient;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClientReview;
@@ -32,6 +33,7 @@
     private final Provider<GerritClientReview> clientReviewProvider;
     @Getter
     private final IChatGptClient chatGptClient;
+    private final Localizer localizer;
 
     private GerritCommentRange gerritCommentRange;
     private List<ReviewBatch> reviewBatches;
@@ -44,12 +46,15 @@
             Configuration config,
             ChangeSetData changeSetData,
             Provider<GerritClientReview> clientReviewProvider,
-            IChatGptClient chatGptClient) {
+            IChatGptClient chatGptClient,
+            Localizer localizer
+    ) {
         this.config = config;
         this.gerritClient = gerritClient;
         this.changeSetData = changeSetData;
         this.clientReviewProvider = clientReviewProvider;
         this.chatGptClient = chatGptClient;
+        this.localizer = localizer;
     }
 
     public void review(GerritChange change) throws Exception {
@@ -62,7 +67,7 @@
             log.info("No file to review has been found in the PatchSet");
             return;
         }
-        ChangeSetDataHandler.update(config, change, gerritClient, changeSetData);
+        ChangeSetDataHandler.update(config, change, gerritClient, changeSetData, localizer);
 
         if (changeSetData.getReviewSystemMessage() == null) {
             ChatGptResponseContent reviewReply = getReviewReply(change, patchSet);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/config/Configuration.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/config/Configuration.java
index 2b8a5ae..f4dbd60 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/config/Configuration.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/config/Configuration.java
@@ -262,6 +262,10 @@
         return getDouble(KEY_FILTER_COMMENTS_RELEVANCE_THRESHOLD, DEFAULT_FILTER_COMMENTS_RELEVANCE_THRESHOLD);
     }
 
+    public Locale getLocaleDefault() {
+        return Locale.getDefault();
+    }
+
     public int getVotingMinScore() {
         return getInt(KEY_VOTING_MIN_SCORE, DEFAULT_VOTING_MIN_SCORE);
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataHandler.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataHandler.java
index 8ae9ac8..878202f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataHandler.java
@@ -1,6 +1,7 @@
 package com.googlesource.gerrit.plugins.chatgpt.data;
 
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.localization.Localizer;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClient;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.prompt.ChatGptUserPrompt;
@@ -17,10 +18,16 @@
             Configuration config,
             GerritChange change,
             GerritClient gerritClient,
-            ChangeSetData changeSetData
+            ChangeSetData changeSetData,
+            Localizer localizer
     ) {
         GerritClientData gerritClientData = gerritClient.getClientData(change);
-        ChatGptUserPrompt chatGptUserPrompt = new ChatGptUserPrompt(config, changeSetData, change, gerritClientData);
+        ChatGptUserPrompt chatGptUserPrompt = new ChatGptUserPrompt(
+                config,
+                changeSetData,
+                change,
+                gerritClientData,
+                localizer);
 
         changeSetData.setCommentPropertiesSize(gerritClientData.getCommentProperties().size());
         changeSetData.setDirectives(new HashSet<>());
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/localization/Localizer.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/localization/Localizer.java
new file mode 100644
index 0000000..dcf068b
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/localization/Localizer.java
@@ -0,0 +1,21 @@
+package com.googlesource.gerrit.plugins.chatgpt.localization;
+
+import com.google.inject.Inject;
+import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ResourceBundle;
+
+@Slf4j
+public class Localizer {
+    private final ResourceBundle resourceBundle;
+
+    @Inject
+    public Localizer(Configuration config) {
+        this.resourceBundle = ResourceBundle.getBundle("localization.localTexts", config.getLocaleDefault());
+    }
+
+    public String getText(String key) {
+        return resourceBundle.getString(key);
+    }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientComments.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientComments.java
index e67a3d8..f9cc867 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientComments.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientComments.java
@@ -7,6 +7,7 @@
 import com.google.gerrit.server.util.ManualRequestContext;
 import com.google.inject.Inject;
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.localization.Localizer;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.messages.ClientMessage;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritCodeRange;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritComment;
@@ -31,6 +32,7 @@
     private final ChangeSetData changeSetData;
     private final HashMap<String, GerritComment> commentMap;
     private final HashMap<String, GerritComment> patchSetCommentMap;
+    private final Localizer localizer;
 
     private String authorUsername;
     @Getter
@@ -38,9 +40,15 @@
 
     @VisibleForTesting
     @Inject
-    public GerritClientComments(Configuration config, AccountCache accountCache, ChangeSetData changeSetData) {
+    public GerritClientComments(
+            Configuration config,
+            AccountCache accountCache,
+            ChangeSetData changeSetData,
+            Localizer localizer
+    ) {
         super(config, accountCache);
         this.changeSetData = changeSetData;
+        this.localizer = localizer;
         commentProperties = new ArrayList<>();
         commentMap = new HashMap<>();
         patchSetCommentMap = new HashMap<>();
@@ -137,7 +145,7 @@
     }
 
     private void addLastComments(GerritChange change) {
-        ClientMessage clientMessage = new ClientMessage(config, changeSetData);
+        ClientMessage clientMessage = new ClientMessage(config, changeSetData, localizer);
         try {
             List<GerritComment> latestComments = retrieveComments(change);
             if (latestComments == null) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientReview.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientReview.java
index 9278064..c9f9470 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientReview.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientReview.java
@@ -11,6 +11,7 @@
 import com.google.gerrit.server.util.ManualRequestContext;
 import com.google.inject.Inject;
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.localization.Localizer;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.review.ReviewBatch;
 import lombok.extern.slf4j.Slf4j;
@@ -22,15 +23,16 @@
 import java.util.Optional;
 
 import static com.googlesource.gerrit.plugins.chatgpt.mode.common.client.prompt.MessageSanitizer.sanitizeChatGptMessage;
-import static com.googlesource.gerrit.plugins.chatgpt.settings.Settings.EMPTY_REVIEW_MESSAGE;
-import static com.googlesource.gerrit.plugins.chatgpt.settings.Settings.SYSTEM_MESSAGE_PREFIX;
 
 @Slf4j
 public class GerritClientReview extends GerritClientAccount {
+    private final Localizer localizer;
+
     @VisibleForTesting
     @Inject
-    public GerritClientReview(Configuration config, AccountCache accountCache) {
+    public GerritClientReview(Configuration config, AccountCache accountCache, Localizer localizer) {
         super(config, accountCache);
+        this.localizer = localizer;
     }
 
     public void setReview(
@@ -71,7 +73,7 @@
     private ReviewInput buildReview(List<ReviewBatch> reviewBatches, ChangeSetData changeSetData, Integer reviewScore) {
         ReviewInput reviewInput = ReviewInput.create();
         Map<String, List<CommentInput>> comments = new HashMap<>();
-        String systemMessage = EMPTY_REVIEW_MESSAGE;
+        String systemMessage = localizer.getText("message.empty.review");
         if (changeSetData.getReviewSystemMessage() != null) {
             systemMessage = changeSetData.getReviewSystemMessage();
         }
@@ -82,7 +84,7 @@
             }
         }
         if (comments.isEmpty()) {
-            reviewInput.message(SYSTEM_MESSAGE_PREFIX + systemMessage);
+            reviewInput.message(localizer.getText("system.message.prefix") + ' ' + systemMessage);
         }
         else {
             reviewInput.comments = comments;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/commands/ClientCommands.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/commands/ClientCommands.java
index e77decd..adf1f04 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/commands/ClientCommands.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/commands/ClientCommands.java
@@ -1,6 +1,7 @@
 package com.googlesource.gerrit.plugins.chatgpt.mode.common.client.commands;
 
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.localization.Localizer;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.ClientBase;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.prompt.Directives;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
@@ -13,8 +14,6 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import static com.googlesource.gerrit.plugins.chatgpt.settings.Settings.MESSAGE_DEBUGGING_FUNCTIONALITIES_DISABLED;
-
 @Slf4j
 @Getter
 public class ClientCommands extends ClientBase {
@@ -51,11 +50,14 @@
     private final ChangeSetData changeSetData;
     @Getter
     private final Directives directives;
+    private final Localizer localizer;
+
     @Getter
     private boolean containingHistoryCommand;
 
-    public ClientCommands(Configuration config, ChangeSetData changeSetData) {
+    public ClientCommands(Configuration config, ChangeSetData changeSetData, Localizer localizer) {
         super(config);
+        this.localizer = localizer;
         this.changeSetData = changeSetData;
         directives = new Directives(changeSetData);
         containingHistoryCommand = false;
@@ -123,7 +125,9 @@
                             changeSetData.setReplyFilterEnabled(false);
                         }
                         else {
-                            changeSetData.setReviewSystemMessage(MESSAGE_DEBUGGING_FUNCTIONALITIES_DISABLED);
+                            changeSetData.setReviewSystemMessage(localizer.getText(
+                                    "message.debugging.functionalities.disabled"
+                            ));
                             log.debug("Unable to set Response Mode to Debug: `enableMessageDebugging` config must be " +
                                     "set to true");
                         }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/messages/ClientMessage.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/messages/ClientMessage.java
index 749564f..6370782 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/messages/ClientMessage.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/messages/ClientMessage.java
@@ -1,6 +1,7 @@
 package com.googlesource.gerrit.plugins.chatgpt.mode.common.client.messages;
 
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.localization.Localizer;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.ClientBase;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.commands.ClientCommands;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
@@ -21,14 +22,14 @@
     @Getter
     private String message;
 
-    public ClientMessage(Configuration config, ChangeSetData changeSetData) {
+    public ClientMessage(Configuration config, ChangeSetData changeSetData, Localizer localizer) {
         super(config);
         botMentionPattern = getBotMentionPattern();
-        clientCommands = new ClientCommands(config, changeSetData);
+        clientCommands = new ClientCommands(config, changeSetData, localizer);
     }
 
-    public ClientMessage(Configuration config, ChangeSetData changeSetData, String message) {
-        this(config, changeSetData);
+    public ClientMessage(Configuration config, ChangeSetData changeSetData, String message, Localizer localizer) {
+        this(config, changeSetData, localizer);
         this.message = message;
     }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptComment.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptComment.java
index 36253c2..7b9460a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptComment.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptComment.java
@@ -1,6 +1,7 @@
 package com.googlesource.gerrit.plugins.chatgpt.mode.common.client.prompt;
 
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.localization.Localizer;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.ClientBase;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.messages.ClientMessage;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritComment;
@@ -12,14 +13,16 @@
     protected ClientMessage commentMessage;
 
     private final ChangeSetData changeSetData;
+    private final Localizer localizer;
 
-    public ChatGptComment(Configuration config, ChangeSetData changeSetData) {
+    public ChatGptComment(Configuration config, ChangeSetData changeSetData, Localizer localizer) {
         super(config);
         this.changeSetData = changeSetData;
+        this.localizer = localizer;
     }
 
     protected String getCleanedMessage(GerritComment commentProperty) {
-        commentMessage = new ClientMessage(config, changeSetData, commentProperty.getMessage());
+        commentMessage = new ClientMessage(config, changeSetData, commentProperty.getMessage(), localizer);
         if (isFromAssistant(commentProperty)) {
             commentMessage.removeDebugMessages();
         }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptHistory.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptHistory.java
index f0624d5..1eb2771 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptHistory.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptHistory.java
@@ -1,6 +1,7 @@
 package com.googlesource.gerrit.plugins.chatgpt.mode.common.client.prompt;
 
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.localization.Localizer;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptRequestMessage;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritComment;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
@@ -17,11 +18,8 @@
 public class ChatGptHistory extends ChatGptComment {
     private static final String ROLE_USER = "user";
     private static final String ROLE_ASSISTANT = "assistant";
-    private static final Set<String> MESSAGES_EXCLUDED_FROM_HISTORY = new HashSet<>() {{
-        add(Settings.GERRIT_DEFAULT_MESSAGE_DONE);
-        add(Settings.EMPTY_REVIEW_MESSAGE);
-    }};
 
+    private final Set<String> messagesExcludedFromHistory;
     private final HashMap<String, GerritComment> commentMap;
     private final HashMap<String, GerritComment> patchSetCommentMap;
     private final Set<String> patchSetCommentAdded;
@@ -30,9 +28,18 @@
 
     private boolean filterActive;
 
-    public ChatGptHistory(Configuration config, ChangeSetData changeSetData, GerritClientData gerritClientData) {
-        super(config, changeSetData);
+    public ChatGptHistory(
+            Configuration config,
+            ChangeSetData changeSetData,
+            GerritClientData gerritClientData,
+            Localizer localizer
+    ) {
+        super(config, changeSetData, localizer);
         CommentData commentData = gerritClientData.getCommentData();
+        messagesExcludedFromHistory = Set.of(
+            Settings.GERRIT_DEFAULT_MESSAGE_DONE,
+            localizer.getText("message.empty.review")
+        );
         commentMap = commentData.getCommentMap();
         patchSetCommentMap = commentData.getPatchSetCommentMap();
         patchSetComments = retrievePatchSetComments(gerritClientData);
@@ -123,7 +130,7 @@
     private void addMessageToHistory(List<ChatGptRequestMessage> messageHistory, GerritComment comment) {
         String messageContent = getCleanedMessage(comment);
         boolean shouldNotProcessComment = messageContent.isEmpty() ||
-                MESSAGES_EXCLUDED_FROM_HISTORY.contains(messageContent) ||
+                messagesExcludedFromHistory.contains(messageContent) ||
                 patchSetCommentAdded.contains(messageContent) ||
                 filterActive && isInactiveComment(comment);
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPrompt.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPrompt.java
index 8b7a788..0aa539a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPrompt.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPrompt.java
@@ -1,6 +1,7 @@
 package com.googlesource.gerrit.plugins.chatgpt.mode.common.client.prompt;
 
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.localization.Localizer;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptMessageItem;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
@@ -15,12 +16,18 @@
 public class ChatGptUserPrompt {
     private final ChatGptUserPromptBase chatGptUserPromptBase;
 
-    public ChatGptUserPrompt(Configuration config, ChangeSetData changeSetData, GerritChange change, GerritClientData gerritClientData) {
+    public ChatGptUserPrompt(
+            Configuration config,
+            ChangeSetData changeSetData,
+            GerritChange change,
+            GerritClientData gerritClientData,
+            Localizer localizer
+    ) {
         if (change.getIsCommentEvent()) {
-            chatGptUserPromptBase = new ChatGptUserPromptRequests(config, changeSetData, gerritClientData);
+            chatGptUserPromptBase = new ChatGptUserPromptRequests(config, changeSetData, gerritClientData, localizer);
         }
         else {
-            chatGptUserPromptBase = new ChatGptUserPromptReview(config, changeSetData, gerritClientData);
+            chatGptUserPromptBase = new ChatGptUserPromptReview(config, changeSetData, gerritClientData, localizer);
         }
     }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptBase.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptBase.java
index bd3b8e2..1a2c8d5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptBase.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptBase.java
@@ -1,6 +1,7 @@
 package com.googlesource.gerrit.plugins.chatgpt.mode.common.client.prompt;
 
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.localization.Localizer;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.patch.code.InlineCode;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.patch.diff.FileDiffProcessed;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptMessageItem;
@@ -28,11 +29,16 @@
     @Getter
     protected List<GerritComment> commentProperties;
 
-    public ChatGptUserPromptBase(Configuration config, ChangeSetData changeSetData, GerritClientData gerritClientData) {
+    public ChatGptUserPromptBase(
+            Configuration config,
+            ChangeSetData changeSetData,
+            GerritClientData gerritClientData,
+            Localizer localizer
+    ) {
         this.gerritClientData = gerritClientData;
         fileDiffsProcessed = gerritClientData.getFileDiffsProcessed();
         commentData = gerritClientData.getCommentData();
-        gptMessageHistory = new ChatGptHistory(config, changeSetData, gerritClientData);
+        gptMessageHistory = new ChatGptHistory(config, changeSetData, gerritClientData, localizer);
         messageItems = new ArrayList<>();
     }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptRequests.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptRequests.java
index 0c23bbd..9316bc5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptRequests.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptRequests.java
@@ -1,6 +1,7 @@
 package com.googlesource.gerrit.plugins.chatgpt.mode.common.client.prompt;
 
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.localization.Localizer;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptMessageItem;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptRequestMessage;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
@@ -14,9 +15,10 @@
     public ChatGptUserPromptRequests(
             Configuration config,
             ChangeSetData changeSetData,
-            GerritClientData gerritClientData
+            GerritClientData gerritClientData,
+            Localizer localizer
     ) {
-        super(config, changeSetData, gerritClientData);
+        super(config, changeSetData, gerritClientData, localizer);
         commentProperties = commentData.getCommentProperties();
     }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptReview.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptReview.java
index c65b4a9..006fac9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptReview.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptReview.java
@@ -1,6 +1,7 @@
 package com.googlesource.gerrit.plugins.chatgpt.mode.common.client.prompt;
 
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.localization.Localizer;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptMessageItem;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptRequestMessage;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
@@ -15,9 +16,10 @@
     public ChatGptUserPromptReview(
             Configuration config,
             ChangeSetData changeSetData,
-            GerritClientData gerritClientData
+            GerritClientData gerritClientData,
+            Localizer localizer
     ) {
-        super(config, changeSetData, gerritClientData);
+        super(config, changeSetData, gerritClientData, localizer);
         commentProperties = new ArrayList<>(commentData.getCommentMap().values());
     }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/settings/Settings.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/settings/Settings.java
index 3705e01..9e74d10 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/settings/Settings.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/settings/Settings.java
@@ -16,11 +16,6 @@
     );
     public static final String GERRIT_COMMIT_MESSAGE_PREFIX = "Subject: ";
 
-    public static final String SYSTEM_MESSAGE_PREFIX = "SYSTEM MESSAGE: ";
-    public static final String EMPTY_REVIEW_MESSAGE = "No update to show for this Change Set";
-    public static final String MESSAGE_DEBUGGING_FUNCTIONALITIES_DISABLED = "Message Debugging functionalities are " +
-            "disabled";
-
     public enum MODES {
         stateless,
         stateful
diff --git a/src/main/resources/localization/localTexts.properties b/src/main/resources/localization/localTexts.properties
new file mode 100644
index 0000000..512f858
--- /dev/null
+++ b/src/main/resources/localization/localTexts.properties
@@ -0,0 +1,3 @@
+system.message.prefix=SYSTEM MESSAGE:
+message.empty.review=No update to show for this Change Set
+message.debugging.functionalities.disabled=Message Debugging functionalities are disabled
diff --git a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java
index fb1859f..fd316e0 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java
@@ -36,6 +36,7 @@
 import com.googlesource.gerrit.plugins.chatgpt.listener.GerritEventContextModule;
 import com.google.inject.TypeLiteral;
 import com.google.inject.util.Providers;
+import com.googlesource.gerrit.plugins.chatgpt.localization.Localizer;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClient;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClientComments;
@@ -298,21 +299,28 @@
     }
 
     private void initTest() {
-        ChangeSetData changeSetData = new ChangeSetData(GPT_USER_ACCOUNT_ID, config.getVotingMinScore(), config.getMaxReviewFileSize());
+        ChangeSetData changeSetData = new ChangeSetData(
+                GPT_USER_ACCOUNT_ID,
+                config.getVotingMinScore(),
+                config.getMaxReviewFileSize()
+        );
+        Localizer localizer = new Localizer(config);
         gerritClient =
             new GerritClient(
                 new GerritClientFacade(
                     config,
                     changeSetData,
-                    new GerritClientComments(config, accountCacheMock, changeSetData),
+                    new GerritClientComments(config, accountCacheMock, changeSetData, localizer),
                     getGerritClientPatchSet()));
         patchSetReviewer =
             new PatchSetReviewer(
                 gerritClient,
                 config,
                 changeSetData,
-                Providers.of(new GerritClientReview(config, accountCacheMock)),
-                getChatGptClient());
+                Providers.of(new GerritClientReview(config, accountCacheMock, localizer)),
+                getChatGptClient(),
+                localizer
+            );
         mockConfigCreator = mock(ConfigCreator.class);
     }
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/integration/CodeReviewPluginIT.java b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/integration/CodeReviewPluginIT.java
index e814f64..2f4c452 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/integration/CodeReviewPluginIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/integration/CodeReviewPluginIT.java
@@ -2,6 +2,7 @@
 
 import com.google.gerrit.server.account.AccountCache;
 import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.localization.Localizer;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClient;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClientReview;
@@ -67,13 +68,14 @@
     @Test
     public void setReview() throws Exception {
         ChangeSetData changeSetData = new ChangeSetData(1, config.getVotingMinScore(), config.getMaxReviewFileSize());
+        Localizer localizer = new Localizer(config);
         when(config.getGerritUserName()).thenReturn("Your Gerrit username");
 
         List<ReviewBatch> reviewBatches = new ArrayList<>();
         reviewBatches.add(new ReviewBatch());
         reviewBatches.get(0).setContent("message");
 
-        GerritClientReview gerritClientReview = new GerritClientReview(config, accountCache);
+        GerritClientReview gerritClientReview = new GerritClientReview(config, accountCache, localizer);
         gerritClientReview.setReview(new GerritChange("Your changeId"), reviewBatches, changeSetData);
     }
 }
