Use webpack

This change adds webpack as the main tool used while developing the
extension. The extension has been minimally refactored so it works with
webpack, with the intention of refactoring it even further in follow-up
CLs in order to improve the file/folder structure of the project and its
readibility.

Bug: translateselectedtext:5
Change-Id: I89d7422e38fdaf46661c96527c51aa4436ad8056
diff --git a/src/static/LICENSE b/src/static/LICENSE
new file mode 100644
index 0000000..23b8b3e
--- /dev/null
+++ b/src/static/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Adrià Vilanova Martínez
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/src/static/_locales/README.md b/src/static/_locales/README.md
new file mode 100644
index 0000000..79bcafa
--- /dev/null
+++ b/src/static/_locales/README.md
@@ -0,0 +1,11 @@
+# _locales folder
+This folder contains the extension strings in various languages.
+
+*** note
+**Warning:** The only file that should be modified in this folder is the
+`en/messages.json` file.
+
+After modifying that file, it should get uploaded to Crowdin so it can be
+translated there, and afterwards the `downloadTranslations.bash` script at the
+`//tools/i18n` directory can be run to generate all the other subfolders.
+***
diff --git a/src/static/_locales/am/messages.json b/src/static/_locales/am/messages.json
new file mode 100644
index 0000000..c587212
--- /dev/null
+++ b/src/static/_locales/am/messages.json
@@ -0,0 +1,56 @@
+{
+	"appName": {
+		"message": "የተመረጠ ጽሁፍ ተርጉም",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "የተመረጠ ጽሁፍ ተርጉም (ቤታ)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "የተመረጠውን ጽሑፍ በ ጉግል ትራንስሌት ይተርጉሙ",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "የተመረጠውን ወደ ... ተርጉም",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "የተመረጠውን ወደ  '$language$' ተርጉም",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "ቋንቋዎችን አርትዕ...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "እንኳን ደህና መጡ!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "እባክዎ \"ትርጉም\" ዝርዝር ውስጥ ለማየት የሚፈልጉትን ቋንቋዎች ይምረጡ ።",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "ቋንቋዎች ፦",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "ሌሎች አማራጮች ፥",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "ለእያንዳንዱ ትርጉም የ ጉግል ትራንስሌትን በአዲስ ትር ይክፈቱ ።",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "ጉግል ትራንስሌትን በልዩ ትርታ ይክፈቱ እና በርካታ ትሮችን ከመክፈት ይልቅ የመጨረሻውን ትርጉም ይለውጡ።",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	}
+}
diff --git a/src/static/_locales/ar/messages.json b/src/static/_locales/ar/messages.json
new file mode 100644
index 0000000..e4e0dc5
--- /dev/null
+++ b/src/static/_locales/ar/messages.json
@@ -0,0 +1,98 @@
+{
+	"appName": {
+		"message": "ترجمة النص المحدد",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "ترجمة النص المحدد (تجريبي)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "ترجمة النص المحدد مع ترجمة جوجل",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "ترجمة المحدد إلى...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "ترجمة التحديد إلى '$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "تحرير لغات...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "مرحبا!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "من فضلك، حدد اللغات التي تريد أن تظهر في قائمة\"ترجمة\".",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "اللغات:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "خيارات أخرى:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "افتح ترجمة جوجل في علامة تبويب جديدة لكل ترجمة.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "افتح جوجل ترجمة في علامة تبويب فريدة وتجاوز الترجمة الآخرى بدلاً من فتح العديد من علامات التبويب.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_savebutton": {
+		"message": "حفظ",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "إضافة لغة",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "إضافة",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "اللغة:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "إعتمادات",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_homepage": {
+		"message": "الصفحة الرئيسية",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "بواسطة",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_ok": {
+		"message": "موافق",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "إلغاء",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "شكرا لتثبيت '\"ترجمة النص المحدد\"'"
+	},
+	"notification_install_message": {
+		"message": "انقر فوق هذا الإشعار لإعداده."
+	}
+}
diff --git a/src/static/_locales/bg/messages.json b/src/static/_locales/bg/messages.json
new file mode 100644
index 0000000..dca91ca
--- /dev/null
+++ b/src/static/_locales/bg/messages.json
@@ -0,0 +1,114 @@
+{
+	"appName": {
+		"message": "Превод на избрания текст",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Превод на избрания текст (бета)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Превод на избрания текст с Google Преводач",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Преведете избраното на...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Преведете избраното на '$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Редактиране на езиците...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Добре дошли!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Изберете езиците, които искате да се показват в менюто за превод.",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Езици:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Други опции:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Отваряне на Google Преводач в ново табло за всеки превод.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Отваряне на Google Преводач в едно уникално табло и заменяне на последния превод вместо да се отварят много табла.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_tabsoption_3": {
+		"message": "Отваряне на Google Преводач в изскачащ прозорец.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new popup)."
+	},
+	"options_savebutton": {
+		"message": "Запазване",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Добавяне на език",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Добавяне",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Език:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Благодарности",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_createdby": {
+		"message": "Разширението е създадено от <a href=\"https://www.avm99963.com/\" target=\"_blank\">@avm99963</a> (Адрия Виланова Мартинес Adrià Vilanova Martínez)",
+		"description": "Text shown in the credits dialog, which shows that the extension was created by Adrià Vilanova Martínez (and their username is avm99963)."
+	},
+	"options_credits_homepage": {
+		"message": "начална страница",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "от",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_credits_translations": {
+		"message": "Преводи",
+		"description": "Header for the section in the credits dialog which recognizes translators."
+	},
+	"options_credits_translations_paragraph": {
+		"message": "Желая да дам много специални благодарности на следните сътрудници, които безкористно превеждаха интерфейса на разширението на много езици:",
+		"description": "Paragraph in the 'Translations' section of the credits dialog, which recognizes translators. Following this paragraph there's a list with all the translators' names (if you've translated a string in Crowdin, you'll automatically be added to the list in the following extension update)."
+	},
+	"options_ok": {
+		"message": "Добре",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Отказ",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Благодарим за инсталирането на 'Превод на избрания текст'"
+	},
+	"notification_install_message": {
+		"message": "Щракнете на това известие, за да настроите разширението."
+	}
+}
diff --git a/src/static/_locales/bn/messages.json b/src/static/_locales/bn/messages.json
new file mode 100644
index 0000000..2b3eb71
--- /dev/null
+++ b/src/static/_locales/bn/messages.json
@@ -0,0 +1,98 @@
+{
+	"appName": {
+		"message": "Translate Selected Text",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Translate Selected Text (বিটা)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Google Translate এর সাথে Translate selected text",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "নির্বাচনে অনুবাদ...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "নির্বাচনে অনুবাদ করুন'$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "ভাষা সম্পাদনা করুন...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "স্বাগতম!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "দয়া করে, \"অনুবাদ\" মেনুতে আপনি যে ভাষাগুলি দেখাতে চান তা নির্বাচন করুন।",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "ভাষাগুলো:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "অন্যান্য বিকল্প:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "প্রতিটি অনুবাদের জন্য একটি নতুন ট্যাবে Google Translate খুলুন।",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "একটি অনন্য ট্যাবে Google Translate খুলুন এবং কয়েকটি ট্যাব খোলার পরিবর্তে শেষ অনুবাদকে ওভাররাইড করুন।",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_savebutton": {
+		"message": "সংরক্ষণ করুন",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "ভাষা যুক্ত করুন",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "যোগ করুন",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "ভাষা:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "কৃতজ্ঞতায়",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_homepage": {
+		"message": "হোমপেজে",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "কর্তৃক",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_ok": {
+		"message": "ঠিক আছে",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "বাতিল করুন",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "'Translate Selected Text' ইনস্টল করার জন্য ধন্যবাদ"
+	},
+	"notification_install_message": {
+		"message": "এটি সেট আপ করতে এই বিজ্ঞপ্তিটি ক্লিক করুন।"
+	}
+}
diff --git a/src/static/_locales/ca/messages.json b/src/static/_locales/ca/messages.json
new file mode 100644
index 0000000..3788063
--- /dev/null
+++ b/src/static/_locales/ca/messages.json
@@ -0,0 +1,114 @@
+{
+	"appName": {
+		"message": "Traduir Text Seleccionat",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Traduir Text Seleccionat (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Tradueix el text que seleccionis amb el traductor de Google",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Tradueix la selecció al...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Tradueix la selecció a '$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Modifica els idiomes...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Benvinguda!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Si us plau, selecciona els idiomes que vols que surtin al menú \"traduir\".",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Idiomes:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Altres opcions:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Obre Google Traductor en una pestanya nova per a cada traducció.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Obre Google Traductor en una única pestanya i reemplaça l'última traducció en comptes d'obrir diverses pestanyes.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_tabsoption_3": {
+		"message": "Obre Google Traductor en una finestra emergent.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new popup)."
+	},
+	"options_savebutton": {
+		"message": "Desa",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Afegeix un idioma",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Afegeix",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Idioma:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Crèdits",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_createdby": {
+		"message": "Extensió creada per: <a href=\"https://www.avm99963.com/\" target=\"_blank\">@avm99963</a> (Adrià Vilanova Martínez)",
+		"description": "Text shown in the credits dialog, which shows that the extension was created by Adrià Vilanova Martínez (and their username is avm99963)."
+	},
+	"options_credits_homepage": {
+		"message": "pàgina web",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "per",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_credits_translations": {
+		"message": "Traduccions",
+		"description": "Header for the section in the credits dialog which recognizes translators."
+	},
+	"options_credits_translations_paragraph": {
+		"message": "M'agradaria donar moltes gràcies especialment als següents col·laboradors, que han traduit la interfaç de l'extensió a molts idiomes desinteressadament:",
+		"description": "Paragraph in the 'Translations' section of the credits dialog, which recognizes translators. Following this paragraph there's a list with all the translators' names (if you've translated a string in Crowdin, you'll automatically be added to the list in the following extension update)."
+	},
+	"options_ok": {
+		"message": "D'acord",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Cancel·lar",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Gràcies per instal·lar 'Traduir Text Seleccionat'"
+	},
+	"notification_install_message": {
+		"message": "Fes clic en aquesta notificació per a configurar l'extensió."
+	}
+}
diff --git a/src/static/_locales/cs/messages.json b/src/static/_locales/cs/messages.json
new file mode 100644
index 0000000..dd8e7e4
--- /dev/null
+++ b/src/static/_locales/cs/messages.json
@@ -0,0 +1,114 @@
+{
+	"appName": {
+		"message": "Translate Selected Text",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Translate Selected Text (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Přeložte označený text pomocí překladače Google",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Přeložit označený text do...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Přeložit označený text do '$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Editovat jazyky...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Vítejte!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Vyberte jazyky, které chcete zobrazit v nabídce \"přeložit\".",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Jazyky:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Další možnosti:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Pro každý překlad otevřít na nové kartě překladač Google.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Místo otevírání několika karet otevřít překladač Google na jedinečné kartě a přepsat poslední překlad.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_tabsoption_3": {
+		"message": "Překladač Google otevřít ve vyskakovacím okně.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new popup)."
+	},
+	"options_savebutton": {
+		"message": "Uložit",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Přidat jazyk",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Přidat",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Jazyk:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Poděkování",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_createdby": {
+		"message": "Rozšíření vytvořil: <a href=\"https://www.avm99963.com/\" target=\"_blank\">@avm99963</a> (Adrià Vilanova Martínez)",
+		"description": "Text shown in the credits dialog, which shows that the extension was created by Adrià Vilanova Martínez (and their username is avm99963)."
+	},
+	"options_credits_homepage": {
+		"message": "domovská stránka",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "od",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_credits_translations": {
+		"message": "Překlady",
+		"description": "Header for the section in the credits dialog which recognizes translators."
+	},
+	"options_credits_translations_paragraph": {
+		"message": "Rád bych poděkoval následujícím přispěvatelům, kteří obětavě přeložili rozhraní tohoto rozšíření do mnoha jazyků:",
+		"description": "Paragraph in the 'Translations' section of the credits dialog, which recognizes translators. Following this paragraph there's a list with all the translators' names (if you've translated a string in Crowdin, you'll automatically be added to the list in the following extension update)."
+	},
+	"options_ok": {
+		"message": "OK",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Zrušit",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Děkujeme za instalaci 'Translate Selected Text'"
+	},
+	"notification_install_message": {
+		"message": "Pro nastavení klikněte na toto oznámení."
+	}
+}
diff --git a/src/static/_locales/de/messages.json b/src/static/_locales/de/messages.json
new file mode 100644
index 0000000..dacdd2f
--- /dev/null
+++ b/src/static/_locales/de/messages.json
@@ -0,0 +1,114 @@
+{
+	"appName": {
+		"message": "Ausgewählten Text übersetzen",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Ausgewählten Text übersetzen (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Ausgewählten Text mit Google Übersetzer übersetzen",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Auswahl übersetzen auf...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Auswahl übersetzen auf '$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Sprachen bearbeiten...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Willkommen!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Bitte wählen Sie die Sprachen aus, die im Übersetzungsmenü angezeigt werden sollen.",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Sprachen:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Weitere Optionen:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Öffnen Sie Google Übersetzer in einem neuen Tab für jede Übersetzung.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Öffnen Sie Google Übersetzer in einem besonderen Tab und überschreiben Sie die letzte Übersetzung, anstatt weitere Tabs zu öffnen.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_tabsoption_3": {
+		"message": "Google Translate in einem Popup öffnen.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new popup)."
+	},
+	"options_savebutton": {
+		"message": "Speichern",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Sprache hinzufügen",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Hinzufügen",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Sprache:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Mitwirkende",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_createdby": {
+		"message": "Erweiterung erstellt von: <a href=\"https://www.avm99963.com/\" target=\"_blank\">@avm99963</a> (Adrià Vilanova Martínez)",
+		"description": "Text shown in the credits dialog, which shows that the extension was created by Adrià Vilanova Martínez (and their username is avm99963)."
+	},
+	"options_credits_homepage": {
+		"message": "Startseite",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "von",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_credits_translations": {
+		"message": "Übersetzungen",
+		"description": "Header for the section in the credits dialog which recognizes translators."
+	},
+	"options_credits_translations_paragraph": {
+		"message": "Ich möchte mich ganz besonders bei den folgenden Mitwirkenden bedanken, die die Benutzeroberfläche der Erweiterung selbstlos in viele Sprachen übersetzt haben:",
+		"description": "Paragraph in the 'Translations' section of the credits dialog, which recognizes translators. Following this paragraph there's a list with all the translators' names (if you've translated a string in Crowdin, you'll automatically be added to the list in the following extension update)."
+	},
+	"options_ok": {
+		"message": "OK",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Abbrechen",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Danke für die Installation von 'Translate Selected Text'."
+	},
+	"notification_install_message": {
+		"message": "Klicken die auf diese Benachrichtigung, um diese einzurichten."
+	}
+}
diff --git a/src/static/_locales/en/messages.json b/src/static/_locales/en/messages.json
new file mode 100644
index 0000000..07ffcfb
--- /dev/null
+++ b/src/static/_locales/en/messages.json
@@ -0,0 +1,110 @@
+{
+	"appName": {
+		"message": "Translate Selected Text",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Translate Selected Text (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Translate selected text with Google Translate",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Translate selection into...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Translate selection into '$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+          "language": {
+            "content": "$1",
+            "example": "Language to translate into."
+          }
+        }
+	},
+	"contextmenu_edit": {
+		"message": "Edit languages...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Welcome!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Please, select the languages you want to show up in the \"translate\" menu.",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Languages:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Other options:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Open Google Translate in a new tab for each translation.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Open Google Translate in a unique tab and override the last translation instead of opening several tabs.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_tabsoption_3": {
+		"message": "Open Google Translate in a popup.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new popup)."
+	},
+	"options_savebutton": {
+		"message": "Save",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Add language",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Add",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Language:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Credits",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+  "options_credits_createdby": {
+    "message": "Extension created by: <a href=\"https://www.avm99963.com/\" target=\"_blank\">@avm99963</a> (Adrià Vilanova Martínez)",
+    "description": "Text shown in the credits dialog, which shows that the extension was created by Adrià Vilanova Martínez (and their username is avm99963)."
+  },
+	"options_credits_homepage": {
+		"message": "homepage",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "by",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+  "options_credits_translations": {
+    "message": "Translations",
+    "description": "Header for the section in the credits dialog which recognizes translators."
+  },
+  "options_credits_translations_paragraph": {
+    "message": "I would like to give a very special thank you to the following contributors, who have selflessly translated the extension interface to many languages:",
+    "description": "Paragraph in the 'Translations' section of the credits dialog, which recognizes translators. Following this paragraph there's a list with all the translators' names (if you've translated a string in Crowdin, you'll automatically be added to the list in the following extension update)."
+  },
+	"options_ok": {
+		"message": "OK",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Cancel",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": { "message": "Thanks for installing 'Translate Selected Text'" },
+	"notification_install_message": { "message": "Click this notification to set it up." }
+}
diff --git a/src/static/_locales/es/messages.json b/src/static/_locales/es/messages.json
new file mode 100644
index 0000000..63d6c1f
--- /dev/null
+++ b/src/static/_locales/es/messages.json
@@ -0,0 +1,114 @@
+{
+	"appName": {
+		"message": "Traducir Texto Seleccionado",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Traducir Texto Seleccionado (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Traduce el texto que selecciones con el Traductor de Google.",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Traducir selección al...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Traducir selección al '$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Modifica idiomas...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "¡Bienvenido!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Por favor, selecciona los idiomas que quieres que se muestren en el menú \"traducir\".",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Idiomas:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Otras opciones:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Abre Google Traductor en una nueva pestaña para cada traducción.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Abre Google Traductor en una única pestaña y reemplaza la última traducción en vez de abrir varias pestañas.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_tabsoption_3": {
+		"message": "Abre Google Traductor en una ventana emergente.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new popup)."
+	},
+	"options_savebutton": {
+		"message": "Guardar",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Añadir idioma",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Añade",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Idioma:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Créditos",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_createdby": {
+		"message": "Extensión creada por: <a href=\"https://www.avm99963.com/\" target=\"_blank\">@avm99963</a> (Adrià Vilanova Martínez)",
+		"description": "Text shown in the credits dialog, which shows that the extension was created by Adrià Vilanova Martínez (and their username is avm99963)."
+	},
+	"options_credits_homepage": {
+		"message": "página web",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "por",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_credits_translations": {
+		"message": "Traducciones",
+		"description": "Header for the section in the credits dialog which recognizes translators."
+	},
+	"options_credits_translations_paragraph": {
+		"message": "Me gustaría dar muchas gracias especialmente a los siguientes colaboradores, que han traducido la interfaz de la extensión a muchos idiomas desinteresadamente:",
+		"description": "Paragraph in the 'Translations' section of the credits dialog, which recognizes translators. Following this paragraph there's a list with all the translators' names (if you've translated a string in Crowdin, you'll automatically be added to the list in the following extension update)."
+	},
+	"options_ok": {
+		"message": "Aceptar",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Cancelar",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Gracias por instalar 'Traducir Texto Seleccionado'"
+	},
+	"notification_install_message": {
+		"message": "Haz clic en esta notificación para configurar la extensión."
+	}
+}
diff --git a/src/static/_locales/et/messages.json b/src/static/_locales/et/messages.json
new file mode 100644
index 0000000..56e4684
--- /dev/null
+++ b/src/static/_locales/et/messages.json
@@ -0,0 +1,114 @@
+{
+	"appName": {
+		"message": "Tõlgi valitud tekst",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Tõlgi valitud tekst (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Tõlgi valitud tekst Google'i tõlkega",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Tõlgi valitud tekst...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Tõlgi valitud '$language$' keelde",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Muuda keeli...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Tere tulemast!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Palun valige keeled mida soovite, et kuvaksime \"tõlkimise\" menüüs.",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Keeled:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Teised valikud:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Ava Google'i tõlge iga tõlke kohta uues vahelehes.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Ava Google'i tõlge uues vahelehes ja kirjuta viimase tõlkega see iga kord üle - avamata uusi vahelehti.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_tabsoption_3": {
+		"message": "Ava Google'i tõlge hüpikaknas.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new popup)."
+	},
+	"options_savebutton": {
+		"message": "Salvesta",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Lisa keel",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Lisa",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Keel:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Tunnustus",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_createdby": {
+		"message": "Laienduse looja: <a href=\"https://www.avm99963.com/\" target=\"_blank\">@avm99963</a> (Adrià Vilanova Martínez)",
+		"description": "Text shown in the credits dialog, which shows that the extension was created by Adrià Vilanova Martínez (and their username is avm99963)."
+	},
+	"options_credits_homepage": {
+		"message": "koduleht",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "autor",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_credits_translations": {
+		"message": "Tõlked",
+		"description": "Header for the section in the credits dialog which recognizes translators."
+	},
+	"options_credits_translations_paragraph": {
+		"message": "Tahaksin avaldada erilist tänu järgnevatele panustajatele, kes on ennastsalgavalt tõlkinud käesolevat laiendusliidest mitmetesse keeltesse:",
+		"description": "Paragraph in the 'Translations' section of the credits dialog, which recognizes translators. Following this paragraph there's a list with all the translators' names (if you've translated a string in Crowdin, you'll automatically be added to the list in the following extension update)."
+	},
+	"options_ok": {
+		"message": "OK",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Loobu",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Täname, et paigaldasite 'Tõlgi valitud tekst'"
+	},
+	"notification_install_message": {
+		"message": "Klikake seadistamiseks sellele teatele."
+	}
+}
diff --git a/src/static/_locales/fa/messages.json b/src/static/_locales/fa/messages.json
new file mode 100644
index 0000000..e2b4e09
--- /dev/null
+++ b/src/static/_locales/fa/messages.json
@@ -0,0 +1,114 @@
+{
+	"appName": {
+		"message": "ترجمه کردن متن انتخاب شده",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "ترجمه کردن متن انتخاب شده‌ (نسخه بتا)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "ترجمه کردن متن انتخاب شده با مترجم گوگل",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "ترجمه متن انتخاب شده به ...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "ترجمه متن انتخاب شده به '$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "ویرایش زبان ها",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "خوش آمدید!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "لطفا زبان هایی را که میخواهید در منوی ترجمه نمایش داده شوند انتخاب کنید.",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "زبان ها:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "سایر گزینه ها",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "بازکردن مترجم گوگل در یک تب جدید برای هر ترجمه",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "بازکردن مترجم گوگل در یک تب خاص و تغییر ترجمه قبل به جای باز کردن چند تب",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_tabsoption_3": {
+		"message": "بازکردن مترجم گوگل در یک پنجره بازشو (popup)",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new popup)."
+	},
+	"options_savebutton": {
+		"message": "ذخیره",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "اضافه کردن زبان",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "افزودن",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "زبان:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "سازندگان",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_createdby": {
+		"message": "افزونه توسط <a href=\"https://www.avm99963.com/\" target=\"_blank\">@avm99963</a>  (Adrià Vilanova Martínez) ساخته شده است.",
+		"description": "Text shown in the credits dialog, which shows that the extension was created by Adrià Vilanova Martínez (and their username is avm99963)."
+	},
+	"options_credits_homepage": {
+		"message": "صفحه اصلی",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "توسط",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_credits_translations": {
+		"message": "ترجمه ها",
+		"description": "Header for the section in the credits dialog which recognizes translators."
+	},
+	"options_credits_translations_paragraph": {
+		"message": "من میخواهم از عوامل زیر که به صورت داوطلبانه رابط کاربری افزونه را به زبان های زیادی ترجمه کردند تشکر ویژه کنم:",
+		"description": "Paragraph in the 'Translations' section of the credits dialog, which recognizes translators. Following this paragraph there's a list with all the translators' names (if you've translated a string in Crowdin, you'll automatically be added to the list in the following extension update)."
+	},
+	"options_ok": {
+		"message": "باشه",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "انصراف",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "از شما سپاسگذاریم که 'Translate Selected Text' را نصب کردید."
+	},
+	"notification_install_message": {
+		"message": "برای تنظیم کردن روی اعلان کلیک کنید."
+	}
+}
diff --git a/src/static/_locales/fil/messages.json b/src/static/_locales/fil/messages.json
new file mode 100644
index 0000000..de05c07
--- /dev/null
+++ b/src/static/_locales/fil/messages.json
@@ -0,0 +1,98 @@
+{
+	"appName": {
+		"message": "Isalin ang piniling teksto",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Isalin ang Napiling Teksto (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Isalin ang piniling teksto gamit ang Google Translate",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Isalin ang pagpili sa...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Isalin ang pagpili sa '$wika$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "I-edit ang mga wika...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Maligayang pagdating!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Paki pili ang mga wikang nais mong makita sa mga pagpipilian sa \"pagsasalin\".",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Mga Wika:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Ibang mapagpipilian:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Buksan sa panibagong tab ang Google Translate para sa bawat pagsasalin.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Buksan ang Google Translate sa natatanging tab at ipawalang bisa ang huling pagsasalin sa halip na magbukas ng ilan pang mga tabs.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_savebutton": {
+		"message": "I-save",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Magdagdag ng wika",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Dagdagan",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Wika:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Mga Kredito",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_homepage": {
+		"message": "homepage",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "by",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_ok": {
+		"message": "Ayos na",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Kanselahin",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Salamat sa pag-install ng 'Isalin sa Napiling Wika'"
+	},
+	"notification_install_message": {
+		"message": "I-clik ang abiso para ito ay ma set-up."
+	}
+}
diff --git a/src/static/_locales/fr/messages.json b/src/static/_locales/fr/messages.json
new file mode 100644
index 0000000..3149c2e
--- /dev/null
+++ b/src/static/_locales/fr/messages.json
@@ -0,0 +1,114 @@
+{
+	"appName": {
+		"message": "Traduire le texte sélectionné",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Traduire le texte sélectionné (Bêta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Traduisez le texte sélectionné avec Google Traduction",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Traduire la sélection en...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Traduire la sélection en « $language$ »",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Choix des langues...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Bienvenue !",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "S’il vous plaît, sélectionnez les langues que vous souhaitez voir dans le menu « traduire ».",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Langues :",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Autres Options :",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Ouvrir Google Traduction dans un nouvel onglet pour chaque traduction.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Ouvrir Google Traduction dans un onglet unique et remplacer la traduction précédente au lieu d’ouvrir plusieurs onglets.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_tabsoption_3": {
+		"message": "Ouvrir Google Traduction dans un pop-up.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new popup)."
+	},
+	"options_savebutton": {
+		"message": "Enregistrer",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Ajouter une langue",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Ajouter",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Langue :",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Crédits",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_createdby": {
+		"message": "Extension créée par: <a href=\"https://www.avm99963.com/\" target=\"_blank\">@avm99963</a> (Adrià Vilanova Martínez)",
+		"description": "Text shown in the credits dialog, which shows that the extension was created by Adrià Vilanova Martínez (and their username is avm99963)."
+	},
+	"options_credits_homepage": {
+		"message": "page d'accueil",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "par",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_credits_translations": {
+		"message": "Traductions",
+		"description": "Header for the section in the credits dialog which recognizes translators."
+	},
+	"options_credits_translations_paragraph": {
+		"message": "Je tiens à remercier particulièrement les contributeurs suivants, qui ont traduit de manière désintéressée l'interface d'extension dans de nombreuses langues:",
+		"description": "Paragraph in the 'Translations' section of the credits dialog, which recognizes translators. Following this paragraph there's a list with all the translators' names (if you've translated a string in Crowdin, you'll automatically be added to the list in the following extension update)."
+	},
+	"options_ok": {
+		"message": "OK",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Annuler",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Merci d'avoir installé « Traduire le texte sélectionné »"
+	},
+	"notification_install_message": {
+		"message": "Cliquez sur cette notification pour la paramétrer."
+	}
+}
diff --git a/src/static/_locales/hi/messages.json b/src/static/_locales/hi/messages.json
new file mode 100644
index 0000000..e38ab54
--- /dev/null
+++ b/src/static/_locales/hi/messages.json
@@ -0,0 +1,98 @@
+{
+	"appName": {
+		"message": "Translate Selected Text",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Translate Selected Text (बीटा)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Google Translate के साथ चयनित पाठ का अनुवाद करें",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "चयन का अनुवाद करें इसमें...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "चयन का अनुवाद '$language$' में करें",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "भाषाएं संपादित करें...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "स्वागत हे!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "कृप्या, उन भाषाओं का चयन करे जिन्हें आप \"अनुवाद\" मेनू में देखना चाहते हैं।",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "भाषाएँ:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "दूसरे विकल्प:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "हर एक अनुवाद के लिए Google Translate को एक नया टैब में खोलें।",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Google ट्रांसलेट को एक अद्वितीय टैब में खोलें और पिछले अनुवाद को ओवरराइड करें कई टैब खोलने के बजाय|",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_savebutton": {
+		"message": "सहेजें",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "भाषा जोड़ें",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "जोड़ें",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "भाषा:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "क्रेडिट",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_homepage": {
+		"message": "होमपेज",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "द्वारा",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_ok": {
+		"message": "ठीक है",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "रद्द करें",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "'Translate Selected Text' इंस्टॉल करने के लिए धन्यवाद"
+	},
+	"notification_install_message": {
+		"message": "इस नोटिफिकेशन को क्लिक करें इसे सेट अप करने के लिए|"
+	}
+}
diff --git a/src/static/_locales/hr/messages.json b/src/static/_locales/hr/messages.json
new file mode 100644
index 0000000..cd93f8b
--- /dev/null
+++ b/src/static/_locales/hr/messages.json
@@ -0,0 +1,114 @@
+{
+	"appName": {
+		"message": "Prijevod označenog teksta",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Prijevod označenog teksta (beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Prijevod označenog teksta pomoću Google prevoditelja",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Prevedi označeno na...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Prevedi označeno na '$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Uređivanje jezika...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Dobrodošli!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Odaberite jezike koje želite prikazati u izborniku \"prevedi\". ",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Jezici:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Više mogućnosti:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Otovri Google prevoditelj u novoj kartici za svaki prijevod.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Otvori Google prevoditelj u jedinstvenoj kartici i zamijeni posljednji prijevod umjesto otvaranja nekoliko kartica.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_tabsoption_3": {
+		"message": "Otvori Google prevoditelj u skočnom prozoru.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new popup)."
+	},
+	"options_savebutton": {
+		"message": "Spremi",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Dodaj jezik",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Dodaj",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Jezik:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Zasluge",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_createdby": {
+		"message": "Proširenje izradio: <a href=\"https://www.avm99963.com/\" target=\"_blank\">@avm99963</a> (Adrià Vilanova Martínez)",
+		"description": "Text shown in the credits dialog, which shows that the extension was created by Adrià Vilanova Martínez (and their username is avm99963)."
+	},
+	"options_credits_homepage": {
+		"message": "početna stranica",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "od",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_credits_translations": {
+		"message": "Prijevodi",
+		"description": "Header for the section in the credits dialog which recognizes translators."
+	},
+	"options_credits_translations_paragraph": {
+		"message": "Posebna zahvala sljedećim suradnicima, koji su nesebično preveli sučelje proširenja na mnoge jezike:",
+		"description": "Paragraph in the 'Translations' section of the credits dialog, which recognizes translators. Following this paragraph there's a list with all the translators' names (if you've translated a string in Crowdin, you'll automatically be added to the list in the following extension update)."
+	},
+	"options_ok": {
+		"message": "U redu",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Otkaži",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Hvala što ste instalirali \"Prijevod označenog teksta\""
+	},
+	"notification_install_message": {
+		"message": "Pritisnite na ovu obavijest kako bi uredili postavke."
+	}
+}
diff --git a/src/static/_locales/hu/messages.json b/src/static/_locales/hu/messages.json
new file mode 100644
index 0000000..a640414
--- /dev/null
+++ b/src/static/_locales/hu/messages.json
@@ -0,0 +1,98 @@
+{
+	"appName": {
+		"message": "Kijelölt szöveg fordítása",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Kijelölt szöveg fordítása (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Kijelölt szöveg fordítása Google Translate-al",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Szöveg fordítása...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Szöveg fordítása \"$language$\" -ra",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Nyelv módosítása...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Üdvözöljük!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Kérjük, válassza ki a megjeleníteni kívánt nyelveket a \"lefordítás\" menüben.",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Nyelvek:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Egyéb lehetőségek:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Nyissa meg a Google Fordítót egy új lapon minden fordításhoz.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Nyissa meg a Google Fordítót egy egyedi lapon, és felülírja az utolsó fordítást több lap megnyitása helyett.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_savebutton": {
+		"message": "Mentés",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Nyelv hozzáadása",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Hozzáadás",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Nyelv:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Credits",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_homepage": {
+		"message": "honlap",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "által",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_ok": {
+		"message": "OK",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Mégse",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Köszönjük, hogy telepítette"
+	},
+	"notification_install_message": {
+		"message": "Kattints erre az értesítésre a beállításhoz."
+	}
+}
diff --git a/src/static/_locales/id/messages.json b/src/static/_locales/id/messages.json
new file mode 100644
index 0000000..d40842e
--- /dev/null
+++ b/src/static/_locales/id/messages.json
@@ -0,0 +1,98 @@
+{
+	"appName": {
+		"message": "Terjemahkan teks yang dipilih",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Terjemahkan teks yang dipilih (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Terjemahkan teks yang dipilih dengan Google Terjemahan",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Terjemahkan pilihan ke...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Terjemahkan pilihan ke '$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Sunting bahasa...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Selamat Datang!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Silahkan pilih bahasa yang ingin Anda tampilkan di menu \"terjemahan\".",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Bahasa:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Pilihan lain:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Buka Google Terjemahan dalam tab baru untuk setiap terjemahan.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Buka Google Terjemahan di tab unik dan mengesampingkan terjemahan terakhir pada pembukaan beberapa tab.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_savebutton": {
+		"message": "Simpan",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Tambah bahasa",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Tambah",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Bahasa:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Reputasi",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_homepage": {
+		"message": "beranda",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "oleh",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_ok": {
+		"message": "OKE",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Batal",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Terima kasih sudah mengintall 'Translate Selected Text'"
+	},
+	"notification_install_message": {
+		"message": "Klik pemberitahuan ini untuk menyelesaikannya."
+	}
+}
diff --git a/src/static/_locales/it/messages.json b/src/static/_locales/it/messages.json
new file mode 100644
index 0000000..230f996
--- /dev/null
+++ b/src/static/_locales/it/messages.json
@@ -0,0 +1,98 @@
+{
+	"appName": {
+		"message": "Traduci il testo selezionato",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Traduci il testo selezionato (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Traduci il testo selezionato con Google Traduttore",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Traduci selezione in...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Traduci la selezione in '$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Modifica le lingue...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Benvenuto!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Si prega di selezionare le lingue che vuoi mostrare nel menu \"traduci\".",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Lingue:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Altre opzioni:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Aprire Google Translate in una nuova scheda per ogni traduzione.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Aprire Google Translate in una scheda unica e ignorare l'ultima traduzione invece di aprire diverse schede.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_savebutton": {
+		"message": "Salva",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Aggiungi lingua",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Aggiungi",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Lingua:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Crediti",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_homepage": {
+		"message": "homepage",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "di",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_ok": {
+		"message": "OK",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Cancella",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Grazie per aver installato 'Translate Selected Text'"
+	},
+	"notification_install_message": {
+		"message": "Cliccate su questa notificazione per configurarlo."
+	}
+}
diff --git a/src/static/_locales/nl/messages.json b/src/static/_locales/nl/messages.json
new file mode 100644
index 0000000..11bb8a8
--- /dev/null
+++ b/src/static/_locales/nl/messages.json
@@ -0,0 +1,98 @@
+{
+	"appName": {
+		"message": "Vertaal Geselecteerde Tekst",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Geselecteerde Tekst Vertalen (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Vertaal geselecteerde tekst met Google Translate",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Selectie vertalen naar...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Selectie naar '$language$' vertalen",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Talen bewerken...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Welkom!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Alstublieft, selecteer de talen die u wilt weergeven in het menu \"vertalen\".",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Talen:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Andere opties:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Open Google Translate in een nieuw tabblad voor elke vertaling.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Open Google Translate in een enkel tabblad en vervang de nieuwste vertaling in plaats van het openen van meerdere tabbladen.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_savebutton": {
+		"message": "Opslaan",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Taal toevoegen",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Toevoegen",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Taal:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Credits",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_homepage": {
+		"message": "startpagina",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "door",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_ok": {
+		"message": "OK",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Annuleren",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Bedankt voor het installeren van 'Vertaal Geselecteerde Tekst'"
+	},
+	"notification_install_message": {
+		"message": "Klik op deze melding om de extensie te configureren."
+	}
+}
diff --git a/src/static/_locales/pl/messages.json b/src/static/_locales/pl/messages.json
new file mode 100644
index 0000000..ec28574
--- /dev/null
+++ b/src/static/_locales/pl/messages.json
@@ -0,0 +1,114 @@
+{
+	"appName": {
+		"message": "Przetłumacz zaznaczony tekst",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Tłumacz zaznaczony tekst (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Przetłumacz zaznaczony tekst za pomocą Tłumacza Google",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Tłumacz zaznaczenie na...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Tłumacz zaznaczone na '$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Edytuj języki...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Witaj!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Proszę wybierz języki, które chcesz widzieć w menu \"translate\".",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Języki:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Inne opcje:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Otwórz Tłumacz Google w nowym oknie dla każdego tłumaczenia.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Otwórz Google Tłumacz w unikalnej karcie i zastąp ostatnie tłumaczenie zamiast otwierać dużo okien.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_tabsoption_3": {
+		"message": "Otwórz tłumaczenie Google w wyskakującym oknie.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new popup)."
+	},
+	"options_savebutton": {
+		"message": "Zapisz",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Dodaj język",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Dodaj",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Język:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Autorstwo",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_createdby": {
+		"message": "Rozszerzenie stworzone przez: <a href=\"https://www.avm99963.com/\" target=\"_blank\">@avm99963</a> (Adrià Vilanova Martínez)",
+		"description": "Text shown in the credits dialog, which shows that the extension was created by Adrià Vilanova Martínez (and their username is avm99963)."
+	},
+	"options_credits_homepage": {
+		"message": "strona główna",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "przez",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_credits_translations": {
+		"message": "Tłumaczenie",
+		"description": "Header for the section in the credits dialog which recognizes translators."
+	},
+	"options_credits_translations_paragraph": {
+		"message": "Chciałbym bardzo podziękować poniższym współtwórcom, którzy bezinteresownie przetłumaczyli interfejs rozszerzenia na wiele języków:",
+		"description": "Paragraph in the 'Translations' section of the credits dialog, which recognizes translators. Following this paragraph there's a list with all the translators' names (if you've translated a string in Crowdin, you'll automatically be added to the list in the following extension update)."
+	},
+	"options_ok": {
+		"message": "Ok",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Anuluj",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Dziękujemy za zainstalowanie 'Translate Selected Text'"
+	},
+	"notification_install_message": {
+		"message": "Kliknij to powiadomienie, aby skonfigurować."
+	}
+}
diff --git a/src/static/_locales/pt_BR/messages.json b/src/static/_locales/pt_BR/messages.json
new file mode 100644
index 0000000..254663b
--- /dev/null
+++ b/src/static/_locales/pt_BR/messages.json
@@ -0,0 +1,98 @@
+{
+	"appName": {
+		"message": "Traduzir o texto selecionado",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Traduzir o texto selecionado (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Traduzir o texto selecionado com o Google Tradutor",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Traduzir seleção em...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Traduzir seleção em '$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Editar idiomas...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Bem-vindo!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Por favor, selecione os idiomas que você quer que apareçam no menu \"traduzir\".",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Idiomas:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Outras opções:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Abrir o Google Tradutor em uma nova guia para cada tradução.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Abrir o Google Tradutor em uma única guia e substituir a última tradução em vez de abrir várias abas.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_savebutton": {
+		"message": "Salvar",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Adicionar idioma",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Adicionar",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Idioma:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Créditos",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_homepage": {
+		"message": "página inicial",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "por",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_ok": {
+		"message": "OK",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Cancelar",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Obrigado por instalar 'Traduzir Texto Selecionado'"
+	},
+	"notification_install_message": {
+		"message": "Clique nesta notificação para configurar."
+	}
+}
diff --git a/src/static/_locales/pt_PT/messages.json b/src/static/_locales/pt_PT/messages.json
new file mode 100644
index 0000000..fd42060
--- /dev/null
+++ b/src/static/_locales/pt_PT/messages.json
@@ -0,0 +1,98 @@
+{
+	"appName": {
+		"message": "Traduzir o texto selecionado",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Traduzir o texto selecionado (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Traduzir o texto selecionado com o Google Translate",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Traduzir seleção em...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Traduzir seleção em '$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Editar idiomas...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Bem vindo!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Por favor, selecione os idiomas que você quer aparecer no menu \"traduzir\".",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Linguas:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Outras opções:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Abra o Google Translate em uma nova aba para cada tradução.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Abra o Google Translate em uma única guia e substituir a última tradução em vez de abrir várias abas.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_savebutton": {
+		"message": "Salvar",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Adicional idioma",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Adicionar",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Lingua:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Créditos",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_homepage": {
+		"message": "página inicial",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "por",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_ok": {
+		"message": "OK",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Cancelar",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Obrigado por instalar 'Traduzir o texto selecionado'"
+	},
+	"notification_install_message": {
+		"message": "Clique nesta notificação para configurá-lo."
+	}
+}
diff --git a/src/static/_locales/ro/messages.json b/src/static/_locales/ro/messages.json
new file mode 100644
index 0000000..5c20b9d
--- /dev/null
+++ b/src/static/_locales/ro/messages.json
@@ -0,0 +1,98 @@
+{
+	"appName": {
+		"message": "Traducerea textul selectat",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Traducerea textului selectat (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Traduceți textul selectat cu Google Translate",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Traduceți selecția în...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Traduceți selecția în '$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Editare limbi...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Bine ați venit!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Vă rugăm să selectați limbile care doriți să apară în meniul \"traduce\".",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Limbi:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Alte opțiuni:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Deschide Google Translate într-o filă nouă pentru fiecare traducere.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Deschide Google Translate într-o filă unică și în loc să se deschidă mai multe file, suprascrie ultima traducere.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_savebutton": {
+		"message": "Salvați",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Adaugă limbă",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Adaugă",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Limbă:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Credite",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_homepage": {
+		"message": "pagină principală",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "de",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_ok": {
+		"message": "OK",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Anulare",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Vă mulțumim pentru că ați instalat 'Translate Selected Text'"
+	},
+	"notification_install_message": {
+		"message": "Apăsați pe această notificare pentru a o configura."
+	}
+}
diff --git a/src/static/_locales/ru/messages.json b/src/static/_locales/ru/messages.json
new file mode 100644
index 0000000..6d28bd6
--- /dev/null
+++ b/src/static/_locales/ru/messages.json
@@ -0,0 +1,114 @@
+{
+	"appName": {
+		"message": "Перевести выбранный текст",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Перевести выбранный текст (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Перевод выбранного текста с помощью Google Переводчика",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Перевести на...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Перевести на '$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Настройки...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Добро пожаловать!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Выберите языки, которые вы хотите видеть в контекстном меню.",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Языки:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Другие опции:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Открывать вкладку Google Переводчика в новой вкладке для каждого перевода.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Открывать Google Переводчик в одной вкладке, и перезаписывать предыдущие результаты, вместо открытия нескольких вкладок.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_tabsoption_3": {
+		"message": "Открывать Google Переводчик во всплывающем окне.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new popup)."
+	},
+	"options_savebutton": {
+		"message": "Сохранить",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Добавить язык",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Добавить",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Язык:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Благодарность",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_createdby": {
+		"message": "Автор расширения: <a href=\"https://www.avm99963.com/\" target=\"_blank\">@avm99963</a> (Adrià Vilanova Martínez)",
+		"description": "Text shown in the credits dialog, which shows that the extension was created by Adrià Vilanova Martínez (and their username is avm99963)."
+	},
+	"options_credits_homepage": {
+		"message": "Домашняя страница",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "от",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_credits_translations": {
+		"message": "Переводы",
+		"description": "Header for the section in the credits dialog which recognizes translators."
+	},
+	"options_credits_translations_paragraph": {
+		"message": "Особая благодарность следующим соучастникам за перевод интерфейса расширения на многие языки:",
+		"description": "Paragraph in the 'Translations' section of the credits dialog, which recognizes translators. Following this paragraph there's a list with all the translators' names (if you've translated a string in Crowdin, you'll automatically be added to the list in the following extension update)."
+	},
+	"options_ok": {
+		"message": "OK",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Отменить",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Спасибо за установку \"Перевести выбранный текст\""
+	},
+	"notification_install_message": {
+		"message": "Нажмите сюда, чтобы настроить расширение."
+	}
+}
diff --git a/src/static/_locales/sk/messages.json b/src/static/_locales/sk/messages.json
new file mode 100644
index 0000000..e4f6e03
--- /dev/null
+++ b/src/static/_locales/sk/messages.json
@@ -0,0 +1,114 @@
+{
+	"appName": {
+		"message": "Translate Selected Text",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Translate Selected Text (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Preložte zvýraznený text pomocou prekladača Google",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Preložiť označený text do...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Preložiť označený text do '$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Upraviť jazyky...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Vitajte!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "V ponuke \"Preložiť\" vyberte jazyky, ktoré chcete zobraziť.",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Jazyky:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Ďalšie možnosti:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Pre každý preklad otvorte prekladač Google na novej karte.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Namiesto otvárania viacerých kariet otvorte prekladač Google na jedinečnej karte a prepíšte posledný preklad.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_tabsoption_3": {
+		"message": "Vo vyskakovacom okne otvoriť prekladač Google.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new popup)."
+	},
+	"options_savebutton": {
+		"message": "Uložiť",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Pridať jazyk",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Pridať",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Jazyk:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Poďakovania",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_createdby": {
+		"message": "Rozšírenie vytvoril: <a href=\"https://www.avm99963.com/\" target=\"_blank\">@avm99963</a> (Adrià Vilanova Martínez)",
+		"description": "Text shown in the credits dialog, which shows that the extension was created by Adrià Vilanova Martínez (and their username is avm99963)."
+	},
+	"options_credits_homepage": {
+		"message": "domovská stránka",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "od",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_credits_translations": {
+		"message": "Preklady",
+		"description": "Header for the section in the credits dialog which recognizes translators."
+	},
+	"options_credits_translations_paragraph": {
+		"message": "Chcel by som poďakovať nasledujúcim prispievateľom, ktorí obetavo preložili rozhranie tohto rozšírenia do mnohých jazykov:",
+		"description": "Paragraph in the 'Translations' section of the credits dialog, which recognizes translators. Following this paragraph there's a list with all the translators' names (if you've translated a string in Crowdin, you'll automatically be added to the list in the following extension update)."
+	},
+	"options_ok": {
+		"message": "OK",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Zrušiť",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Ďakujeme za inštaláciu 'Translate Selected Text'"
+	},
+	"notification_install_message": {
+		"message": "Nastavte kliknutím na túto notifikáciu."
+	}
+}
diff --git a/src/static/_locales/sl/messages.json b/src/static/_locales/sl/messages.json
new file mode 100644
index 0000000..0a286eb
--- /dev/null
+++ b/src/static/_locales/sl/messages.json
@@ -0,0 +1,98 @@
+{
+	"appName": {
+		"message": "Prevedi izbrano besedilo",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Prevedi izbrano besedilo (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Prevedi izbrano besedilo z Google Prevajalnikom",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Prevedi izbrano v...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Prevedi izbrano v '$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Urejajte jezike...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Dobrodošli!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Prosimo, izberite jezike, za katere želite, da se pokažejo v meniju \"prevedi\".",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Jeziki:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Druge možnosti:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Za vsak prevod odpri Google Prevajalnik v novem zavihku.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Odpri Google Prevajalnik v lastnem zavihku in prikaži samo zadnji prevod, namesto odpiranja več zavihkov.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_savebutton": {
+		"message": "Shrani",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Dodaj jezik",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Dodaj",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Jezik:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Zasluge",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_homepage": {
+		"message": "domača stran",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "avtorja/ice",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_ok": {
+		"message": "V redu",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Prekliči",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Hvala, ker ste namestili 'Translate Selected Text'"
+	},
+	"notification_install_message": {
+		"message": "Kliknite to obvestilo, da jo nastavite."
+	}
+}
diff --git a/src/static/_locales/tr/messages.json b/src/static/_locales/tr/messages.json
new file mode 100644
index 0000000..c74a2fa
--- /dev/null
+++ b/src/static/_locales/tr/messages.json
@@ -0,0 +1,114 @@
+{
+	"appName": {
+		"message": "Seçilen Metni Çevir",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Seçilen Metni Çevir (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Seçili metni Google Translate ile çevir",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Seçimi çevir...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Seçimi '$language$' diline çevir",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Dil seçimi...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Hoşgeldiniz!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Lütfen, \"çevir\" menüsünde görüntülenmesini istediğiniz dilleri seçin.",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Diller:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Diğer seçenekler:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Her çeviri için yeni bir sekmede Google Translate'i açın.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Tek bir sekmede Google Translate'i açın ve birden fazla sekme açmak yerine en yeni çeviriyi değiştirin.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_tabsoption_3": {
+		"message": "Google Çeviri'yi pop-up'ta açın.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new popup)."
+	},
+	"options_savebutton": {
+		"message": "Kaydet",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Dil Ekle",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Ekle",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Dil:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Kredi",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_createdby": {
+		"message": "Eklentiyi oluşturan: <a href=\"https://www.avm99963.com/\" target=\"_blank\">@avm99963</a> (Adrià Vilanova Martínez)",
+		"description": "Text shown in the credits dialog, which shows that the extension was created by Adrià Vilanova Martínez (and their username is avm99963)."
+	},
+	"options_credits_homepage": {
+		"message": "anasayfa",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "tarafından",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_credits_translations": {
+		"message": "Çeviriler",
+		"description": "Header for the section in the credits dialog which recognizes translators."
+	},
+	"options_credits_translations_paragraph": {
+		"message": "Eklenti arayüzünü özverili bir şekilde birçok dile çeviren aşağıdaki katkıda bulunanlara çok özel bir teşekkür etmek istiyorum:",
+		"description": "Paragraph in the 'Translations' section of the credits dialog, which recognizes translators. Following this paragraph there's a list with all the translators' names (if you've translated a string in Crowdin, you'll automatically be added to the list in the following extension update)."
+	},
+	"options_ok": {
+		"message": "Tamam",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "İptal",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "'Seçili Metni Çevir' seçeneğini yüklediğiniz için teşekkür ederiz"
+	},
+	"notification_install_message": {
+		"message": "Uzantıyı yapılandırmak için bu bildirimi tıklayın."
+	}
+}
diff --git a/src/static/_locales/uk/messages.json b/src/static/_locales/uk/messages.json
new file mode 100644
index 0000000..37f47bf
--- /dev/null
+++ b/src/static/_locales/uk/messages.json
@@ -0,0 +1,114 @@
+{
+	"appName": {
+		"message": "Переклад виділеного тексту",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "Переклад виділеного тексту (бета-версія)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "Переклад виділеного тексту з Google Translate",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "Перекласти виділене...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "Перекласти виділене на '$language$'",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "Редагувати мови...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "Вітаємо!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "Будь ласка, виберіть мови, які Ви хочете розмістити в меню \"Переклад\".",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "Мови:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "Додаткові опції:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "Відкривати Google Translate у новій вкладці при кожному перекладі.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "Відкривати Google Translate у унікальній вкладці та змінювати останній переклад замість відкривання кількох вкладок.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_tabsoption_3": {
+		"message": "Відкривати Google Translate у спливаючому вікні.",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new popup)."
+	},
+	"options_savebutton": {
+		"message": "Зберегти",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "Додати мову",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "Додати",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "Мова:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "Автори",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_createdby": {
+		"message": "Розширення створено: <a href=\"https://www.avm99963.com/\" target=\"_blank\">@avm99963</a> (Adrià Vilanova Martínez)",
+		"description": "Text shown in the credits dialog, which shows that the extension was created by Adrià Vilanova Martínez (and their username is avm99963)."
+	},
+	"options_credits_homepage": {
+		"message": "Домівка",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "від",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_credits_translations": {
+		"message": "Переклади",
+		"description": "Header for the section in the credits dialog which recognizes translators."
+	},
+	"options_credits_translations_paragraph": {
+		"message": "Особлива подяка наступним учасникам за переклад розширення на багато мов:",
+		"description": "Paragraph in the 'Translations' section of the credits dialog, which recognizes translators. Following this paragraph there's a list with all the translators' names (if you've translated a string in Crowdin, you'll automatically be added to the list in the following extension update)."
+	},
+	"options_ok": {
+		"message": "ОК",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "Скасувати",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "Дякуємо за встановлення 'Переклад виділеного тексту'"
+	},
+	"notification_install_message": {
+		"message": "Натисніть для налаштувань."
+	}
+}
diff --git a/src/static/_locales/zh_CN/messages.json b/src/static/_locales/zh_CN/messages.json
new file mode 100644
index 0000000..f70e9cc
--- /dev/null
+++ b/src/static/_locales/zh_CN/messages.json
@@ -0,0 +1,114 @@
+{
+	"appName": {
+		"message": "应用程序名称",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "应用程序名称 (Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "用 Google 翻译翻译选中的文本",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "将所选内容转换为...",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "将所选内容转换为 \"$language$\"",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "编辑语言...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "欢迎!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "请在 \"翻译\" 菜单中选择要显示的语言。",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "语言:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "其他选项:",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "为每一个翻译在一个新的标签打开谷歌翻译。",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "在唯一标签中打开Google翻译,并覆盖最后一次翻译,而不是打开多个标签。",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_tabsoption_3": {
+		"message": "在弹出窗口中打开 Google 翻译。",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new popup)."
+	},
+	"options_savebutton": {
+		"message": "保存",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "添加语言",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "添加",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "语言:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "贡献人员",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_createdby": {
+		"message": "扩展作者: <a href=\"https://www.avm99963.com/\" target=\"_blank\">@avm99963</a> (Adriaassum-Vilanova Martinez)",
+		"description": "Text shown in the credits dialog, which shows that the extension was created by Adrià Vilanova Martínez (and their username is avm99963)."
+	},
+	"options_credits_homepage": {
+		"message": "主页",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "由",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_credits_translations": {
+		"message": "翻译",
+		"description": "Header for the section in the credits dialog which recognizes translators."
+	},
+	"options_credits_translations_paragraph": {
+		"message": "我要特别感谢以下贡献者,他们无私地将扩展界面翻译成了多种语言:",
+		"description": "Paragraph in the 'Translations' section of the credits dialog, which recognizes translators. Following this paragraph there's a list with all the translators' names (if you've translated a string in Crowdin, you'll automatically be added to the list in the following extension update)."
+	},
+	"options_ok": {
+		"message": "好的",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "取消",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "感谢您安装“翻译所选文本”"
+	},
+	"notification_install_message": {
+		"message": "单击此通知将其设置。"
+	}
+}
diff --git a/src/static/_locales/zh_TW/messages.json b/src/static/_locales/zh_TW/messages.json
new file mode 100644
index 0000000..fa4f01d
--- /dev/null
+++ b/src/static/_locales/zh_TW/messages.json
@@ -0,0 +1,98 @@
+{
+	"appName": {
+		"message": "翻譯選取文字",
+		"description": "The app name"
+	},
+	"appBetaName": {
+		"message": "翻譯所選文本(Beta)",
+		"description": "The beta app name"
+	},
+	"appDescription": {
+		"message": "翻譯選擇的文本與谷歌翻譯",
+		"description": "The app description"
+	},
+	"contextmenu_title": {
+		"message": "將所選內容轉換為..。",
+		"description": "Title of the context menu that appears when a right click is done. Inside this parent item there are the target languages."
+	},
+	"contextmenu_title2": {
+		"message": "將選區轉換為 \"$language$\"",
+		"description": "Title of the context menu that appears when a right click is done and there's only one language available.",
+		"placeholders": {
+			"language": {
+				"content": "$1",
+				"example": "Language to translate into."
+			}
+		}
+	},
+	"contextmenu_edit": {
+		"message": "编辑语言...",
+		"description": "Title of the item inside the 'Translate section into...' context menu which is used to go to the options page."
+	},
+	"options_welcome": {
+		"message": "歡迎!",
+		"description": "Title of the options page which welcomes users"
+	},
+	"options_introduction": {
+		"message": "请在“翻译”菜单中选择要显示的语言。",
+		"description": "Introduction paragraph in the options page preceding the language list."
+	},
+	"options_languageselectheader": {
+		"message": "語言:",
+		"description": "Header of the selected languages list."
+	},
+	"options_otheroptionsheader": {
+		"message": "其他選項",
+		"description": "Subheader in the options page before the options to choose where should the translation be shown.."
+	},
+	"options_tabsoption_1": {
+		"message": "在每个翻译的新标签页中打开Google翻译。",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in a new tab)."
+	},
+	"options_tabsoption_2": {
+		"message": "在唯一標籤中打開Google翻譯,並覆蓋最後一次翻譯,而不是打開多個標籤。",
+		"description": "Option which defines where should the translations be shown (in this case, each translation will be opened in the same tab used for the previous translation, or will open a new tab if there aren't any translation tabs open)."
+	},
+	"options_savebutton": {
+		"message": "儲存",
+		"description": "Save button in the settings page"
+	},
+	"options_addlanguage": {
+		"message": "添加語言",
+		"description": "Title for the 'Add language' dialog"
+	},
+	"options_addlanguage_addbutton": {
+		"message": "添加",
+		"description": "'Add' button in the footer of the languages list which is used to show a dialog with a list of potential languages to add. In the dialog, this message is also shown inside a button which is used to confirm the action."
+	},
+	"options_language_label": {
+		"message": "语言:",
+		"description": "Label for the language selector in the 'Add language' dialog"
+	},
+	"options_credits": {
+		"message": "製作人員",
+		"description": "Message for the link to the credits dialog, and also the title for the credits dialog, which shows a list of open source projects used inside the extension and a list of translators/contributors."
+	},
+	"options_credits_homepage": {
+		"message": "首頁",
+		"description": "Text shown for links to go to each homepage of open source projects in the credits. NOTE: put in in lowercase letters"
+	},
+	"options_credits_by": {
+		"message": "由",
+		"description": "Fragment of the author statement in an item of the credits. NOTE: put in in lowercase letters. EXAMPLE: '{{options_credits_by}} Adrià Vilanova Martínez'"
+	},
+	"options_ok": {
+		"message": "好的",
+		"description": "OK button in informative dialogs, which is used to close them (no action is done when pressing these buttons)"
+	},
+	"options_cancel": {
+		"message": "取消",
+		"description": "Cancel button in the dialogs, to reject an action."
+	},
+	"notification_install_title": {
+		"message": "感謝您安裝 Translate Selected Text “翻譯所選文本”"
+	},
+	"notification_install_message": {
+		"message": "按一下此通知將其設置。"
+	}
+}
diff --git a/src/static/css/options.css b/src/static/css/options.css
new file mode 100644
index 0000000..1a81c76
--- /dev/null
+++ b/src/static/css/options.css
@@ -0,0 +1,205 @@
+/*@import url("widgets.css");*/
+
+html {
+  direction: __MSG_@@bidi_dir__;
+}
+
+body {
+  padding: 10px;
+  font-family: "Roboto", "Arial", sans-serif !important;
+  background-color: #BBDEFB;
+  background-repeat: repeat;
+  background-position: left top;
+  font-size: 90%;
+  cursor: default;
+  min-width: 400px;
+}
+
+h1 {
+  text-align: center;
+  font-size: 30px;
+}
+
+h2 {
+  font-size: 20px;
+}
+
+#languages_container {
+  width: 300px;
+  height: 250px;
+  border: 1px solid #ccc;
+  background-color: #E3F2FD;
+  overflow: auto;
+}
+
+#languages {
+  list-style: none;
+  margin: 0;
+  padding: 0;
+}
+
+#languages li {
+  padding: 15px;
+  border-bottom: 1px dashed #ddd;
+  background-color: #EEF7FD;
+  cursor: move;
+  -webkit-user-select: none;
+}
+
+#languages li.sortable-ghost {
+  background-color: #E3F2FD;
+}
+
+#languages li .delete {
+  font-size: 14px;
+  float: __MSG_@@bidi_end_edge__;
+  cursor: pointer;
+  color: red;
+}
+
+#languages_footer {
+  width: 300px;
+  height: 35px;
+  background-color: #fff;
+  border: 1px solid #ccc;
+  border-top: 0;
+}
+
+button,
+input,
+select,
+option {
+  font-size: 13px !important;
+}
+
+#languages_add {
+  margin-__MSG_@@bidi_start_edge__: 4px;
+  margin-top: 4px;
+}
+
+#save {
+  display: block;
+  margin: 18px auto;
+}
+
+/* Dialog */
+dialog#languages_add_dialog {
+  position: fixed;
+  top: 50%;
+  left: 50%;
+  margin-left: -216px;
+  margin-top: -91px;
+  height: 150px;
+  width: 400px;
+  border: 1px solid rgba(0, 0, 0, 0.3);
+  border-radius: 6px;
+  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+}
+
+dialog h3 {
+  margin-bottom: 10px;
+}
+
+dialog #language_label {
+  font-size: 12px;
+}
+
+dialog select {
+  width: 100%;
+}
+
+dialog#languages_add_dialog .action_buttons {
+  margin-top: 10px;
+  float: __MSG_@@bidi_end_edge__;
+}
+
+dialog::backdrop {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  background-color: rgba(0, 0, 0, 0.5);
+}
+
+/* Credits */
+#credits_container {
+  position: absolute;
+  top: 0px;
+  __MSG_@@bidi_end_edge__: 50px;
+  background: rgb(195, 235, 204);
+  border: solid 1px rgb(139, 139, 139);
+  border-top: 0;
+  border-radius: 0px 0px 5px 5px;
+}
+
+#credits_container a {
+  color: green !important;
+  margin: 0 5px;
+}
+
+dialog#credits_dialog {
+  position: fixed;
+  top: 50%;
+  left: 50%;
+  margin-left: -216px;
+  margin-top: -231px;
+  padding: 0;
+  height: 430px;
+  width: 400px;
+  border: 1px solid rgba(0, 0, 0, 0.3);
+  border-radius: 6px;
+  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+}
+
+dialog#credits_dialog[open] {
+  display: flex;
+  flex-direction: column;
+}
+
+dialog#credits_dialog .scrollable {
+  padding: 1em;
+  overflow-y: auto;
+}
+
+dialog#credits_dialog .content_area h4 {
+  margin-bottom: 0px;
+}
+
+dialog#credits_dialog .entry {
+  position: relative;
+}
+
+dialog#credits_dialog .entry a.homepage {
+  position: absolute;
+  __MSG_@@bidi_end_edge__: 16px;
+  font-size: 14px;
+}
+
+dialog#credits_dialog p,
+dialog#credits_dialog span {
+  font-size: 14px;
+}
+
+dialog#credits_dialog p.author {
+  margin-top: 7px;
+}
+
+dialog#credits_dialog #translators .name {
+  font-weight: bold;
+}
+
+dialog#credits_dialog .action_buttons {
+  border-top: 1px solid #ccc;
+  padding: 1em;
+  text-align: __MSG_@@bidi_end_edge__;
+}
+
+dialog#credits_dialog .createdby {
+  font-style: italic;
+}
+
+#otheroptions p {
+  margin-top: 0;
+  margin-bottom: 0;
+}
diff --git a/src/static/css/widgets.css b/src/static/css/widgets.css
new file mode 100644
index 0000000..c988a27
--- /dev/null
+++ b/src/static/css/widgets.css
@@ -0,0 +1,304 @@
+/* Copyright (c) 2012 The Chromium Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in https://chromium.googlesource.com/chromium/src/+/master/LICENSE */
+
+/* This file defines styles for form controls. The order of rule blocks is
+ * important as there are some rules with equal specificity that rely on order
+ * as a tiebreaker. These are marked with OVERRIDE. */
+
+/* Default state **************************************************************/
+
+:-webkit-any(button,
+             input[type='button'],
+             input[type='submit']):not(.custom-appearance):not(.link-button),
+select,
+input[type='checkbox'],
+input[type='radio'] {
+  -webkit-appearance: none;
+  -webkit-user-select: none;
+  background-image: -webkit-linear-gradient(#ededed, #ededed 38%, #dedede);
+  border: 1px solid rgba(0, 0, 0, 0.25);
+  border-radius: 2px;
+  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08),
+      inset 0 1px 2px rgba(255, 255, 255, 0.75);
+  color: #444;
+  font: inherit;
+  margin: 0 1px 0 0;
+  outline: none;
+  text-shadow: 0 1px 0 rgb(240, 240, 240);
+}
+
+:-webkit-any(button,
+             input[type='button'],
+             input[type='submit']):not(.custom-appearance):not(.link-button),
+select {
+  min-height: 2em;
+  min-width: 4em;
+
+}
+
+:-webkit-any(button,
+             input[type='button'],
+             input[type='submit']):not(.custom-appearance):not(.link-button) {
+  -webkit-padding-end: 10px;
+  -webkit-padding-start: 10px;
+}
+
+select {
+  -webkit-appearance: none;
+  -webkit-padding-end: 20px;
+  -webkit-padding-start: 6px;
+  /* OVERRIDE */
+  background-image: -webkit-image-set(url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAICAQAAACxSAwfAAAAUklEQVQY02P4z0AMRGZGMaShwCisyhITmb8huMzfEhOxKvuvsGAh208Ik+3ngoX/FbBbClcIUcSAw21QhXxfIIrwKAMpfNsEUYRXGVCEFc6CQwBqq4CCCtU4VgAAAABJRU5ErkJggg==') 1x, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAQCAQAAAA/1a6rAAAAQUlEQVR4Xu3MsQnAMBAEMI1+myf9gw0+3ASCenmu+mQn2yGn3S4Mp906DEW3CEPfzTD03QxD380w3OmIUHe9v+u9QwAt93yns5cAAAAASUVORK5CYII=') 2x),
+      -webkit-linear-gradient(#ededed, #ededed 38%, #dedede);
+  background-position: right center;
+  background-repeat: no-repeat;
+}
+
+html[dir='rtl'] select {
+  background-position: center left;
+}
+
+input[type='checkbox'] {
+
+bottom: 2px;
+  height: 13px;
+  position: relative;
+  vertical-align: middle;
+  width: 13px;
+}
+
+input[type='radio'] {
+  /* OVERRIDE */
+  border-radius: 100%;
+  bottom: 1px;
+  height: 15px;
+  position: relative;
+  vertical-align: middle;
+  width: 15px;
+}
+
+/* TODO(estade): add more types here? */
+input[type='number'],
+input[type='password'],
+input[type='search'],
+input[type='text'],
+input[type='url'],
+input:not([type]),
+textarea {
+  border: 1px solid #bfbfbf;
+  border-radius: 2px;
+  box-sizing: border-box;
+  color: #444;
+  font: inherit;
+  margin: 0;
+  /* Use min-height to accommodate addditional padding for touch as needed. */
+  min-height: 2em;
+  padding: 3px;
+  outline: none;
+/* For better alignment between adjacent buttons and inputs. */
+  padding-bottom: 4px;
+}
+
+input[type='search'] {
+  -webkit-appearance: textfield;
+  /* NOTE: Keep a relatively high min-width for this so we don't obscure the end
+   * of the default text in relatively spacious languages (i.e. German). */
+  min-width: 160px;
+}
+
+/* Remove when https://bugs.webkit.org/show_bug.cgi?id=51499 is fixed.
+ * TODO(dbeam): are there more types that would benefit from this? */
+input[type='search']::-webkit-textfield-decoration-container {
+  direction: inherit;
+}
+
+/* Checked ********************************************************************/
+
+input[type='checkbox']:checked::before {
+  -webkit-user-select: none;
+  background-image: -webkit-image-set(url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAQAAAADpb+tAAAAaElEQVR4Xl3PIQoCQQCF4Y8JW42D1bDZ4iVEjDbxFpstYhC7eIVBZHkXFGw734sv/TqDQQ8Xb1udja/I8igeIm7Aygj2IpoKTGZnVRNxAHYi4iPiDlA9xX+aNQDFySziqDN6uSp6y7ofEMwZ05uUZRkAAAAASUVORK5CYII=') 1x, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAQAAABuvaSwAAAAvElEQVR4XrXPMUrDYBzG4UeRZnAQnFxq3XT3AsVABm8QPIHQIeAJuoqb2s1BcHAIin4HVLqEvx9NQgb5rc/wvn4mNBUbqlKDcezCp6Qexxx7lbapx/CBe6mrHsYrKXQ7hKtIre1nOD/W9eiQiK80inis680JEc+1kien+TEfzom4sJG2aZXxmG9LIqaRerohx6V2J72zl2NY2OTUgxm7MEU25sURfZg4590Zw5iFZ8mXS0ZwN+eaPjyh/8O/H7bzPJ5NOo0AAAAASUVORK5CYII=') 2x);
+  background-size: 100% 100%;
+  content: '';
+  display: block;
+  height: 100%;
+  width: 100%;
+}
+
+input[type='radio']:checked::before {
+  background-color: #666;
+  border-radius: 100%;
+  bottom: 3px;
+  content: '';
+  display: block;
+  left: 3px;
+  position: absolute;
+  right: 3px;
+  top: 3px;
+}
+
+/* Hover **********************************************************************/
+
+:enabled:hover:-webkit-any(
+    select,
+    input[type='checkbox'],
+    input[type='radio'],
+    :-webkit-any(
+        button,
+        input[type='button'],
+        input[type='submit']):not(.custom-appearance):not(.link-button)) {
+  background-image: -webkit-linear-gradient(#f0f0f0, #f0f0f0 38%, #e0e0e0);
+  border-color: rgba(0, 0, 0, 0.3);
+  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.12),
+      inset 0 1px 2px rgba(255, 255, 255, 0.95);
+  color: black;
+}
+
+:enabled:hover:-webkit-any(select) {
+  /* OVERRIDE */
+  background-image: -webkit-image-set(url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAICAQAAACxSAwfAAAAUklEQVQY02P4z0AMRGZGMaShwCisyhITmb8huMzfEhOxKvuvsGAh208Ik+3ngoX/FbBbClcIUcSAw21QhXxfIIrwKAMpfNsEUYRXGVCEFc6CQwBqq4CCCtU4VgAAAABJRU5ErkJggg==') 1x, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAQCAQAAAA/1a6rAAAAQUlEQVR4Xu3MsQnAMBAEMI1+myf9gw0+3ASCenmu+mQn2yGn3S4Mp906DEW3CEPfzTD03QxD380w3OmIUHe9v+u9QwAt93yns5cAAAAASUVORK5CYII=') 2x),
+      -webkit-linear-gradient(#f0f0f0, #f0f0f0 38%, #e0e0e0);
+}
+
+/* Active *********************************************************************/
+
+:enabled:active:-webkit-any(
+    select,
+    input[type='checkbox'],
+    input[type='radio'],
+    :-webkit-any(
+        button,
+        input[type='button'],
+        input[type='submit']):not(.custom-appearance):not(.link-button)) {
+  background-image: -webkit-linear-gradient(#e7e7e7, #e7e7e7 38%, #d7d7d7);
+  box-shadow: none;
+  text-shadow: none;
+}
+
+:enabled:active:-webkit-any(select) {
+  /* OVERRIDE */
+  background-image: -webkit-image-set(url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAICAQAAACxSAwfAAAAUklEQVQY02P4z0AMRGZGMaShwCisyhITmb8huMzfEhOxKvuvsGAh208Ik+3ngoX/FbBbClcIUcSAw21QhXxfIIrwKAMpfNsEUYRXGVCEFc6CQwBqq4CCCtU4VgAAAABJRU5ErkJggg==') 1x, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAQCAQAAAA/1a6rAAAAQUlEQVR4Xu3MsQnAMBAEMI1+myf9gw0+3ASCenmu+mQn2yGn3S4Mp906DEW3CEPfzTD03QxD380w3OmIUHe9v+u9QwAt93yns5cAAAAASUVORK5CYII=') 2x),
+      -webkit-linear-gradient(#e7e7e7, #e7e7e7 38%, #d7d7d7);
+}
+
+/* Disabled *******************************************************************/
+
+:disabled:-webkit-any(
+    button,
+    input[type='button'],
+    input[type='submit']):not(.custom-appearance):not(.link-button),
+select:disabled {
+  background-image: -webkit-linear-gradient(#f1f1f1, #f1f1f1 38%, #e6e6e6);
+  border-color: rgba(80, 80, 80, 0.2);
+  box-shadow: 0 1px 0 rgba(80, 80, 80, 0.08),
+      inset 0 1px 2px rgba(255, 255, 255, 0.75);
+  color: #aaa;
+}
+
+select:disabled {
+  /* OVERRIDE */
+  background-image: -webkit-image-set(url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAICAQAAACxSAwfAAAASklEQVQY02P4z0AMRGZGMaShwCisyhITG/4jw8RErMr+KyxYiFC0YOF/BeyWIikEKWLA4Ta4QogiPMpACt82QRThVQYUYYWz4BAAGr6Ii6kEPacAAAAASUVORK5CYII=') 1x, url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAQCAQAAADQF8WVAAAARElEQVR4Xu3MsQ0AIAwEsYx+m4fySsgLOuTe1Re9z4De4DzbdVDnmZ0ENcrsZJVkdoIKMzurMLOzSjNhlWfCapBlfpZbeMFeGdxKIEQAAAAASUVORK5CYII=') 2x),
+      -webkit-linear-gradient(#f1f1f1, #f1f1f1 38%, #e6e6e6);
+}
+
+input:disabled:-webkit-any([type='checkbox'],
+                           [type='radio']) {
+  opacity: .75;
+}
+
+input:disabled:-webkit-any([type='password'],
+                           [type='search'],
+                           [type='text'],
+                           [type='url'],
+                           :not([type])) {
+  color: #999;
+}
+
+/* Focus **********************************************************************/
+
+:enabled:focus:-webkit-any(
+    select,
+    input[type='checkbox'],
+    input[type='number'],
+    input[type='password'],
+    input[type='radio'],
+    input[type='search'],
+    input[type='text'],
+    input[type='url'],
+    input:not([type]),
+    :-webkit-any(
+         button,
+         input[type='button'],
+         input[type='submit']):not(.custom-appearance):not(.link-button)) {
+  /* OVERRIDE */
+  -webkit-transition: border-color 200ms;
+  /* We use border color because it follows the border radius (unlike outline).
+   * This is particularly noticeable on mac. */
+  border-color: rgb(77, 144, 254);
+  outline: none;
+}
+
+/* Link buttons ***************************************************************/
+
+.link-button {
+  -webkit-box-shadow: none;
+  background: transparent none;
+  border: none;
+  color: rgb(17, 85, 204);
+  cursor: pointer;
+  /* Input elements have -webkit-small-control which can override the body font.
+   * Resolve this by using 'inherit'. */
+  font: inherit;
+  margin: 0;
+  padding: 0;
+}
+
+.link-button:hover {
+  text-decoration: underline;
+}
+
+.link-button:active {
+  color: rgb(5, 37, 119);
+  text-decoration: underline;
+}
+
+.link-button[disabled] {
+  color: #999;
+  cursor: default;
+  text-decoration: none;
+}
+
+/* Checkbox/radio helpers ******************************************************
+ *
+ * .checkbox and .radio classes wrap labels. Checkboxes and radios should use
+ * these classes with the markup structure:
+ *
+ *   <div class="checkbox">
+ *     <label>
+ *       <input type="checkbox"></input>
+ *       <span>
+ *     </label>
+ *   </div>
+ */
+
+:-webkit-any(.checkbox, .radio) label {
+  /* Don't expand horizontally: <http://crbug.com/112091>. */
+  display: -webkit-inline-box;
+  padding-bottom: 7px;
+  padding-top: 7px;
+}
+
+:-webkit-any(.checkbox, .radio) label input ~ span {
+  -webkit-margin-start: 0.6em;
+  -webkit-user-select: none;
+  /* Make sure long spans wrap at the same horizontal position they start. */
+  display: block;
+}
+
+:-webkit-any(.checkbox, .radio) label:hover {
+  color: black;
+}
+
+label > input:disabled:-webkit-any([type='checkbox'], [type='radio']) ~ span {
+  color: #999;
+}
\ No newline at end of file
diff --git a/src/static/json/credits.json b/src/static/json/credits.json
new file mode 100644
index 0000000..690e2a6
--- /dev/null
+++ b/src/static/json/credits.json
@@ -0,0 +1,25 @@
+[
+  {
+    "name": "Metro Uinvert Dock Icon Set",
+    "url": "http://dakirby309.deviantart.com/art/Metro-Uinvert-Dock-Icon-Set-725-Icons-294529071",
+    "author": "dAKirby309"
+  },
+  {
+    "name": "Sortable",
+    "url": "https://github.com/RubaXa/Sortable",
+    "author": "Lebedev Konstantin",
+    "license": "MIT License"
+  },
+  {
+    "name": "Chromium",
+    "url": "https://code.google.com/p/chromium/",
+    "author": "The Chromium Authors",
+    "license": "BSD-like License"
+  },
+  {
+    "name": "What-2-Nite",
+    "url": "https://github.com/enricolucia/what-2-nite/blob/master/isoLangs.json",
+    "author": "Google, Inc.",
+    "license": "MIT License"
+  }
+]
diff --git a/src/static/json/i18n-credits.json b/src/static/json/i18n-credits.json
new file mode 100644
index 0000000..2f15495
--- /dev/null
+++ b/src/static/json/i18n-credits.json
@@ -0,0 +1,404 @@
+[
+  {
+    "name": "Alexander Simkin",
+    "languages": [
+      {
+        "id": "ru",
+        "name": "Russian"
+      }
+    ]
+  },
+  {
+    "name": "Omer Surer (omersurer)",
+    "languages": [
+      {
+        "id": "nl",
+        "name": "Dutch"
+      },
+      {
+        "id": "tr",
+        "name": "Turkish"
+      }
+    ]
+  },
+  {
+    "name": "myjourney in Steemit (myjourney)",
+    "languages": [
+      {
+        "id": "zh-CN",
+        "name": "Chinese Simplified"
+      },
+      {
+        "id": "zh-TW",
+        "name": "Chinese Traditional"
+      }
+    ]
+  },
+  {
+    "name": "Lukas Novotny (novas78)",
+    "languages": [
+      {
+        "id": "cs",
+        "name": "Czech"
+      },
+      {
+        "id": "sk",
+        "name": "Slovak"
+      }
+    ]
+  },
+  {
+    "name": "Serhiy Dmytryshyn (dies)",
+    "languages": [
+      {
+        "id": "ru",
+        "name": "Russian"
+      },
+      {
+        "id": "uk",
+        "name": "Ukrainian"
+      }
+    ]
+  },
+  {
+    "name": "Dremski",
+    "languages": [
+      {
+        "id": "bg",
+        "name": "Bulgarian"
+      }
+    ]
+  },
+  {
+    "name": "Thoth",
+    "languages": [
+      {
+        "id": "et",
+        "name": "Estonian"
+      }
+    ]
+  },
+  {
+    "name": "Reza Rafsanjani (R3z4_Pr0gramm3r)",
+    "languages": [
+      {
+        "id": "fa",
+        "name": "Persian"
+      }
+    ]
+  },
+  {
+    "name": "HetzblattGegenHetze (hetzegegenhetze)",
+    "languages": [
+      {
+        "id": "de",
+        "name": "German"
+      }
+    ]
+  },
+  {
+    "name": "Nettlebay AP (nettlebay)",
+    "languages": [
+      {
+        "id": "fr",
+        "name": "French"
+      }
+    ]
+  },
+  {
+    "name": "Christian Dos Reis (christianytony)",
+    "languages": [
+      {
+        "id": "it",
+        "name": "Italian"
+      }
+    ]
+  },
+  {
+    "name": "M Angga Ariska (anggaariska)",
+    "languages": [
+      {
+        "id": "id",
+        "name": "Indonesian"
+      }
+    ]
+  },
+  {
+    "name": "Ahmed Mohamed Abbas (moodfactor)",
+    "languages": [
+      {
+        "id": "ar",
+        "name": "Arabic"
+      }
+    ]
+  },
+  {
+    "name": "zararina",
+    "languages": [
+      {
+        "id": "fil",
+        "name": "Filipino"
+      }
+    ]
+  },
+  {
+    "name": "dusttanker (macio955)",
+    "languages": [
+      {
+        "id": "pl",
+        "name": "Polish"
+      }
+    ]
+  },
+  {
+    "name": "Can Altıntaş (crybois)",
+    "languages": [
+      {
+        "id": "en-GB",
+        "name": "English, United Kingdom"
+      }
+    ]
+  },
+  {
+    "name": "Andra  (sarmizegetusa)",
+    "languages": [
+      {
+        "id": "ro",
+        "name": "Romanian"
+      }
+    ]
+  },
+  {
+    "name": "Csegöldi Csaba (csacseg)",
+    "languages": [
+      {
+        "id": "hu",
+        "name": "Hungarian"
+      }
+    ]
+  },
+  {
+    "name": "Miguel Dos Reis (siersod)",
+    "languages": [
+      {
+        "id": "pt-PT",
+        "name": "Portuguese"
+      }
+    ]
+  },
+  {
+    "name": "jznsamuel (jasonsamuel88)",
+    "languages": [
+      {
+        "id": "hi",
+        "name": "Hindi"
+      }
+    ]
+  },
+  {
+    "name": "sagorahmed",
+    "languages": [
+      {
+        "id": "bn",
+        "name": "Bengali"
+      }
+    ]
+  },
+  {
+    "name": "Grimpy",
+    "languages": [
+      {
+        "id": "sl",
+        "name": "Slovenian"
+      }
+    ]
+  },
+  {
+    "name": "Zacarias Ponte (wolfteambrconta)",
+    "languages": [
+      {
+        "id": "pt-BR",
+        "name": "Portuguese, Brazilian"
+      }
+    ]
+  },
+  {
+    "name": "Marko Varović (mvarovic)",
+    "languages": [
+      {
+        "id": "de",
+        "name": "German"
+      },
+      {
+        "id": "hr",
+        "name": "Croatian"
+      }
+    ]
+  },
+  {
+    "name": "Marko (MarkoIndaco)",
+    "languages": [
+      {
+        "id": "it",
+        "name": "Italian"
+      }
+    ]
+  },
+  {
+    "name": "Arefat Dev (arefat2005)",
+    "languages": [
+      {
+        "id": "am",
+        "name": "Amharic"
+      }
+    ]
+  },
+  {
+    "name": "Marek Siwak (siwakmarek1971)",
+    "languages": [
+      {
+        "id": "pl",
+        "name": "Polish"
+      }
+    ]
+  },
+  {
+    "name": "hypnotichemionus",
+    "languages": [
+      {
+        "id": "zh-CN",
+        "name": "Chinese Simplified"
+      }
+    ]
+  },
+  {
+    "name": "Emre Kayık (emrekayik)",
+    "languages": [
+      {
+        "id": "tr",
+        "name": "Turkish"
+      }
+    ]
+  },
+  {
+    "name": "NationalPark (nationalpark)",
+    "languages": [
+      {
+        "id": "zh-CN",
+        "name": "Chinese Simplified"
+      }
+    ]
+  },
+  {
+    "name": "Sturix",
+    "languages": [
+      {
+        "id": "ru",
+        "name": "Russian"
+      }
+    ]
+  },
+  {
+    "name": "DAI GIA VO (lecay0945578232)",
+    "languages": [
+      {
+        "id": "vi",
+        "name": "Vietnamese"
+      }
+    ]
+  },
+  {
+    "name": "wpwwsw wpwwsw (wpwwsw)",
+    "languages": [
+      {
+        "id": "zh-CN",
+        "name": "Chinese Simplified"
+      }
+    ]
+  },
+  {
+    "name": "GiorgioHerbie",
+    "languages": [
+      {
+        "id": "it",
+        "name": "Italian"
+      }
+    ]
+  },
+  {
+    "name": "Я. Николов (qroslavnikolaev)",
+    "languages": [
+      {
+        "id": "bg",
+        "name": "Bulgarian"
+      },
+      {
+        "id": "en-GB",
+        "name": "English, United Kingdom"
+      }
+    ]
+  },
+  {
+    "name": "Tomas Santisteban Castaño (santicastano55)",
+    "languages": [
+      {
+        "id": "es-ES",
+        "name": "Spanish"
+      }
+    ]
+  },
+  {
+    "name": "潘忠廷 (zs123sz)",
+    "languages": [
+      {
+        "id": "zh-TW",
+        "name": "Chinese Traditional"
+      }
+    ]
+  },
+  {
+    "name": "ต่าย กันทะพันธ์ (taiprotex)",
+    "languages": [
+      {
+        "id": "th",
+        "name": "Thai"
+      }
+    ]
+  },
+  {
+    "name": "jj jpg (smoes.jpg)",
+    "languages": [
+      {
+        "id": "de",
+        "name": "German"
+      }
+    ]
+  },
+  {
+    "name": "hjeans",
+    "languages": [
+      {
+        "id": "es-ES",
+        "name": "Spanish"
+      }
+    ]
+  },
+  {
+    "name": "se7en9702",
+    "languages": [
+      {
+        "id": "te",
+        "name": "Telugu"
+      }
+    ]
+  },
+  {
+    "name": "Thomas Fritz (thomasfritz88)",
+    "languages": [
+      {
+        "id": "de",
+        "name": "German"
+      }
+    ]
+  }
+]
\ No newline at end of file
diff --git a/src/static/options.html b/src/static/options.html
new file mode 100644
index 0000000..fa82672
--- /dev/null
+++ b/src/static/options.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <meta charset="UTF-8">
+  <title>Options</title>
+  <link rel="stylesheet" type="text/css" href="css/options.css">
+  <link href='http://fonts.googleapis.com/css?family=Roboto:400,700,700italic,400italic' rel='stylesheet' type='text/css'>
+</head>
+
+<body>
+  <div id="credits_container">
+    <a href="#credits" id="credits" data-i18n="credits"></a>
+  </div>
+
+  <h1 id="welcome" data-i18n="welcome"></h1>
+
+  <p id="introduction" data-i18n="introduction"></p>
+
+  <div id="languages_container">
+    <ul id="languages"></ul>
+  </div>
+  <div id="languages_footer">
+    <button id="languages_add" data-i18n="addlanguage_addbutton"></button>
+  </div>
+
+  <h2 id="otheroptionsheader" data-i18n="otheroptionsheader"></h2>
+
+  <div id="otheroptions">
+    <p><input type="radio" name="uniquetab" id="varioustabs" value=""> <label id="varioustabs_label" for="varioustabs" data-i18n="tabsoption_1"></label></p>
+    <p><input type="radio" name="uniquetab" id="uniquetab" value="yep"> <label id="uniquetab_label" for="uniquetab" data-i18n="tabsoption_2"></label></p>
+    <p><input type="radio" name="uniquetab" id="popup" value="popup"> <label id="popup_label" for="popup" data-i18n="tabsoption_3"></label></p>
+  </div>
+
+  <button id="save" data-i18n="savebutton"></button>
+
+  <dialog id="languages_add_dialog">
+    <h3 data-i18n="addlanguage"></h3>
+    <div class="content_area">
+      <label id="language_label" for="select_language" data-i18n="language_label"></label>
+      <select id="select_language"></select>
+    </div>
+    <div class="action_buttons">
+      <button id="languages_add_cancel" data-i18n="cancel"></button>
+      <button id="languages_add_ok" data-i18n="addlanguage_addbutton"></button>
+    </div>
+  </dialog>
+  <dialog id="credits_dialog">
+    <div class="scrollable">
+      <h3 data-i18n="credits"></h3>
+      <div class="entry createdby">
+        <div data-i18n="credits_createdby"></div>
+      </div>
+      <div class="entry">
+        <a href="https://gtranslate.avm99963.com/" class="homepage" target="_blank" data-i18n="credits_homepage"></a>
+        <h4 data-i18n="credits_translations"></h4>
+        <div data-i18n="credits_translations_paragraph"></div>
+        <ul id="translators"></ul>
+      </div>
+      <div class="content_area">
+      </div>
+    </div>
+    <div class="action_buttons">
+      <button id="credits_ok" data-i18n="ok"></button>
+    </div>
+  </dialog>
+
+  <script src="options.bundle.js"></script>
+  <script src="js/sortable.js"></script>
+</body>
+
+</html>