diff --git a/src/Api/Data/Api/Response/Catalog/LanguageResponseInterface.php b/src/Api/Data/Api/Response/Catalog/LanguageResponseInterface.php
new file mode 100644
index 0000000..0109217
--- /dev/null
+++ b/src/Api/Data/Api/Response/Catalog/LanguageResponseInterface.php
@@ -0,0 +1,22 @@
+getData(self::LANGUAGES);
+ if ($languages) {
+ return $languages;
+ }
+
+ $language = $this->getData(self::LANGUAGE);
+ if ($language) {
+ if (isset($language['languageid']) && !isset($language[0])) {
+ $language = [$language];
+ }
+
+ $values = [];
+ foreach ($language as $value) {
+ if (!$value instanceof LanguageType) {
+ $value = $this->languageTypeFactory->create(['data' => $value]);
+ }
+
+ $values[] = $value;
+ }
+
+ $this->setLanguages($values);
+ }
+
+ return $this->getData(self::LANGUAGES);
+ }
+
+ /**
+ * @param array $languages
+ * @return LanguageResponse
+ */
+ public function setLanguages(array $languages): LanguageResponseInterface
+ {
+ return $this->setData(self::LANGUAGES, $languages);
+ }
+}
diff --git a/src/Model/Api/Type/LanguageType.php b/src/Model/Api/Type/LanguageType.php
new file mode 100644
index 0000000..3cca9ae
--- /dev/null
+++ b/src/Model/Api/Type/LanguageType.php
@@ -0,0 +1,45 @@
+getData(self::NAME);
+ }
+
+ /**
+ * @param string $name
+ * @return LanguageTypeInterface
+ */
+ public function setName(string $name): LanguageTypeInterface
+ {
+ return $this->setData(self::NAME, $name);
+ }
+
+ /**
+ * @return string
+ */
+ public function getLanguageId(): string
+ {
+ return $this->getData(self::KEY);
+ }
+
+ /**
+ * @param string $languageId
+ * @return LanguageTypeInterface
+ */
+ public function setLanguageId(string $languageId): LanguageTypeInterface
+ {
+ return $this->setData(self::KEY, $languageId);
+ }
+}
diff --git a/src/Model/Config.php b/src/Model/Config.php
index fae3299..527975f 100644
--- a/src/Model/Config.php
+++ b/src/Model/Config.php
@@ -15,6 +15,9 @@ class Config
private const XML_PATH_MERCHANDISING_ENABLED = 'tweakwise/tweakwisejs/merchandising/enabled';
+ private const XML_PATH_UI_LANGUAGE = 'tweakwise/tweakwisejs/general/uilanguage';
+ private const XML_PATH_LANGUAGE = 'tweakwise/tweakwisejs/general/language';
+
private const XML_PATH_SEARCH_TYPE = 'tweakwise/tweakwisejs/search/type';
private const XML_PATH_EVENTS_ENABLED = 'tweakwise/tweakwisejs/events/enabled';
private const XML_PATH_EVENTS_COOKIE_NAME = 'tweakwise/tweakwisejs/events/cookie_name';
@@ -76,4 +79,20 @@ public function getEventsCookieName(): string
{
return $this->scopeConfig->getValue(self::XML_PATH_EVENTS_COOKIE_NAME, ScopeInterface::SCOPE_STORE);
}
+
+ /**
+ * @return string|null
+ */
+ public function getUiLanguage(): ?string
+ {
+ return $this->scopeConfig->getValue(self::XML_PATH_UI_LANGUAGE, ScopeInterface::SCOPE_STORE);
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getLanguage(): ?string
+ {
+ return $this->scopeConfig->getValue(self::XML_PATH_LANGUAGE, ScopeInterface::SCOPE_STORE);
+ }
}
diff --git a/src/Model/Config/Source/Language.php b/src/Model/Config/Source/Language.php
new file mode 100644
index 0000000..6773413
--- /dev/null
+++ b/src/Model/Config/Source/Language.php
@@ -0,0 +1,56 @@
+ __('Default language'),
+ 'value' => ''
+ ]
+ ];
+
+ try {
+ $request = $this->requestFactory->create();
+ /** @var LanguageResponse $response */
+ $response = $this->apiClient->request($request);
+
+ $languages = $response->getLanguages();
+
+ foreach ($languages as $language) {
+ $options[] = [
+ 'label' => $language->getName(),
+ 'value' => $language->getLanguageId()
+ ];
+ }
+ } catch (ApiException $e) {
+ //do nothing
+ }
+
+ return $options;
+ }
+}
diff --git a/src/Model/Config/Source/UiLanguage.php b/src/Model/Config/Source/UiLanguage.php
new file mode 100644
index 0000000..2ed7056
--- /dev/null
+++ b/src/Model/Config/Source/UiLanguage.php
@@ -0,0 +1,29 @@
+ __('Default language'),
+ 'value' => ''
+ ],
+ ['value' => 'en', 'label' => __('English')],
+ ['value' => 'nl', 'label' => __('Dutch')],
+ ['value' => 'de', 'label' => __('German')],
+ ['value' => 'fr', 'label' => __('French')],
+ ['value' => 'es', 'label' => __('Spanish')],
+ ['value' => 'it', 'label' => __('Italian')],
+ ];
+ }
+}
diff --git a/src/ViewModel/Base.php b/src/ViewModel/Base.php
index 8f7e354..e1d2810 100644
--- a/src/ViewModel/Base.php
+++ b/src/ViewModel/Base.php
@@ -49,4 +49,20 @@ public function isEventsEnabled(): bool
{
return $this->config->isEventsEnabled();
}
+
+ /**
+ * @return string|null
+ */
+ public function getUiLanguage(): ?string
+ {
+ return $this->config->getUiLanguage();
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getLanguage(): ?string
+ {
+ return $this->config->getLanguage();
+ }
}
diff --git a/src/etc/adminhtml/di.xml b/src/etc/adminhtml/di.xml
index 0c7e72e..b07d60a 100644
--- a/src/etc/adminhtml/di.xml
+++ b/src/etc/adminhtml/di.xml
@@ -15,6 +15,13 @@
+
+
+ Tweakwise\TweakwiseJs\Model\Api\Request\Catalog\LanguageRequest
+
+
+
@@ -57,6 +64,13 @@
+
+
+
+ Tweakwise\TweakwiseJs\Model\Api\RequestFactory\Catalog\LanguageRequest
+
+
+
diff --git a/src/etc/adminhtml/system.xml b/src/etc/adminhtml/system.xml
index e6886d2..8a942d6 100644
--- a/src/etc/adminhtml/system.xml
+++ b/src/etc/adminhtml/system.xml
@@ -25,6 +25,16 @@
1
+
+
+ Tweakwise\TweakwiseJs\Model\Config\Source\UiLanguage
+ Important: Save your instance key so that all options are loaded.]]>
+
+
+
+ Tweakwise\TweakwiseJs\Model\Config\Source\Language
+ Important: Save your instance key so that all options are loaded.]]>
+
diff --git a/src/view/frontend/layout/default.xml b/src/view/frontend/layout/default.xml
index fb70c4b..94ec3fd 100644
--- a/src/view/frontend/layout/default.xml
+++ b/src/view/frontend/layout/default.xml
@@ -7,7 +7,11 @@
+ ifconfig="tweakwise/tweakwisejs/general/enabled">
+
+ Tweakwise\TweakwiseJs\ViewModel\Base
+
+
getData('view_model');
+$language = (string) $viewModel->getLanguage();
+$uiLanguage = (string) $viewModel->getUiLanguage();
?>