Developer forum

Forum » Templates » How to Get Current Language and Update Checkboxes Accordingly

How to Get Current Language and Update Checkboxes Accordingly

Alex Guo
Reply

Hi everyone,

I'm an intern and new to dynamic web development. I have a question about handling language detection and updating checkboxes accordingly.

Goal:

I need to determine the current language set on the website. There are PDF files available in different languages, and I want to:

  1. Display the correct PDFs based on the selected language.
  2. Ensure that the corresponding checkboxes for the available PDFs are correctly checked.

Question:

What’s the best way to detect the current language and dynamically update the checkboxes to reflect the correct PDFs?

I am using a custom file of Swift_ProductDetailsMediaTable file for this.

This is the current added code to update the checkboxes, hardcoded languages in this script

<script>

                   document.querySelector('.js-dropdown').addEventListener('mouseenter', function() {

                      this.querySelector('.dropdown-menu').classList.add('show');

                          });

                          document.querySelector('.js-dropdown').addEventListener('mouseleave', function() {

                      this.querySelector('.dropdown-menu').classList.remove('show');

                          });

function filterResults(lang) {

var tbody = document.getElementById('download-table').getElementsByTagName('tbody')[0];

for (var i = 0; i < tbody.rows.length; i++) {

var row = tbody.rows[i];

var lang_code = row.classList.item(0);

if (lang == "ALL") {

var checked = document.querySelector(`input[value="ALL"]`).checked;

var checkboxesDiv = document.querySelector('.w-100.p-3');

var checkboxes = checkboxesDiv.querySelectorAll('input[type="checkbox"]');

if (checked) {

tbody.rows[i].classList.remove('hide-row');

checkboxes.forEach(function (checkbox) {

checkbox.checked = true

})

}

else {

tbody.rows[i].classList.add('hide-row');

checkboxes.forEach(function (checkbox) {

checkbox.checked = false

})

}

}

if (lang_code == lang) {

if (lang != "ALL") {

var checked = document.querySelector(`input[value=${lang}]`).checked;

if (checked) {

tbody.rows[i].classList.remove('hide-row');

}

else {

tbody.rows[i].classList.add('hide-row');

}

}

}

}

function updateSelectedLanguages() {

var selectedLanguages = [];

var selectedText = document.querySelector('.js-dropdown-btn');

var checkboxes = document.querySelectorAll('input[name="LanguageId"]:checked');

checkboxes.forEach(function (checkbox) {

if (checkbox.value != "ALL") {

selectedLanguages.push(checkbox.dataset.shortName);

}

});

var selectedLanguagesString = selectedLanguages.join(', ');

if (selectedLanguagesString.length == 0) {

selectedText.innerText = "None";

}

else {

selectedText.innerText = selectedLanguagesString;

}

}

                                                              function handleAllCheckboxChange() {

var allCheckbox = document.querySelector('input[name="LanguageId"][value="ALL"]');

var checkboxes = document.querySelectorAll('input[name="LanguageId"]:not([value="ALL"])');

 

checkboxes.forEach(function (checkbox) {

checkbox.checked = allCheckbox.checked;

});

 

updateSelectedLanguages();

}

function handleOtherCheckboxChange() {

var allCheckbox = document.querySelector('input[name="LanguageId"][value="ALL"]');

var checkboxes = document.querySelectorAll('input[name="LanguageId"]:not([value="ALL"])');

var allChecked = true;

checkboxes.forEach(function (checkbox) {

if (!checkbox.checked) {

allChecked = false;

}

});

allCheckbox.checked = allChecked;

updateSelectedLanguages();

}

var allCheckbox = document.querySelector('input[name="LanguageId"][value="ALL"]');

allCheckbox.addEventListener('change', function () {

handleAllCheckboxChange();

});

var checkboxes = document.querySelectorAll('input[name="LanguageId"]');

checkboxes.forEach(function (checkbox) {

checkbox.addEventListener('change', function () {

if (checkbox.value !== "ALL") {

handleOtherCheckboxChange();

}

updateSelectedLanguages();

});

});

}

document.addEventListener("DOMContentLoaded", function () {

                  // Map languages

                    var langCodeMap = {

                        "English": "LANG1",   // English

                        "Français": "LANG11", // French

                        "Deutsch": "LANG5",   // German

                        "Nederlands": "LANG4",// Dutch

                        "Español": "LANG6",   // Spanish

                        "Italiano": "LANG7",  // Italian

                        "Português": "LANG8", // Portuguese

                        "Polski": "LANG9"     // Polish

                    };

                  // Get language and change text button

                    var buttonSpan = document.querySelector("button.btn.nav-link span");

                    var dropdownbtn = document.querySelector(".js-dropdown-btn");

                    var lang = langCodeMap[buttonSpan.innerText] || "LANG1"; // Default to "LANG1" (English) if not found

 

                    if (dropdownbtn) {

                      dropdownbtn.innerText = buttonSpan.innerText || "English"; // Default to "English" if no match

                    }

                  // uncheck all checkboxes

                    var checkboxes = document.querySelectorAll('input[name="LanguageId"]:not([value="ALL"])');

                    checkboxes.forEach(function (checkbox) {

                      checkbox.checked = false;

                      console.log("Checkbox unchecked: ", checkbox.value);

                    });

                  //check the correct checkbox

                    checkboxes.forEach(function (checkbox) {

                      if (checkbox.value === lang) {

                        checkbox.checked = true; // Check the corresponding checkbox

                        console.log("Checkbox checked: ", checkbox.value);

                      }

                    });

                  //filter correct pdf

                    filterResults(lang);

                  });

<script/>



Any guidance or best practices would be greatly appreciated!

Thanks in advance!


Replies

 
Imar Spaanjaars Dynamicweb Employee
Imar Spaanjaars
Reply
This post has been marked as an answer

Hi Alex,

Inside a CSHTML template you can get the language ID from Dynamicweb.Ecommerce.Common.Context.LanguageID

You only have that available in server side code, not JavaScript, but it's easy to get it in a JavaScript variable and send it to a function:

<script>
  var languageId = '@Dynamicweb.Ecommerce.Common.Context.LanguageID';
  // Use languageId here
</script> 

Hope this helps,

Imar

Votes for this answer: 1

 

You must be logged in to post in the forum