diff --git a/composer.libraries.json b/composer.libraries.json
index f4a463d148912e7b69555c944325aa590fc963aa..922de16605dc6e387bc07d6461f8d33c771a93d2 100644
--- a/composer.libraries.json
+++ b/composer.libraries.json
@@ -147,13 +147,13 @@
             "type": "package",
             "package": {
                 "name": "jquery/intl-tel-input",
-                "version": "17.0.19",
+                "version": "24.1.1",
                 "type": "drupal-library",
                 "extra": {
                     "installer-name": "jquery.intl-tel-input"
                 },
                 "dist": {
-                    "url": "https://github.com/jackocnr/intl-tel-input/archive/refs/tags/v17.0.19.zip",
+                    "url": "https://github.com/jackocnr/intl-tel-input/archive/refs/tags/v24.1.1.zip",
                     "type": "zip"
                 },
                 "license": "MIT"
diff --git a/js/webform.element.telephone.js b/js/webform.element.telephone.js
index 7de581393b4596f317945ecce7b815c32dd0eee9..0bad3c86b1c1ab101b977de7bf798868a190f64b 100644
--- a/js/webform.element.telephone.js
+++ b/js/webform.element.telephone.js
@@ -16,11 +16,11 @@
    */
   Drupal.behaviors.webformTelephoneInternational = {
     attach: function (context) {
-      if (!$.fn.intlTelInput) {
+      if (!window.intlTelInput) {
         return;
       }
 
-      $(once('webform-telephone-international', 'input.js-webform-telephone-international', context)).each(function () {
+      $(once('webform-telephone-international', 'input.js-webform-telephone-international', context)).each(async function () {
         var $telephone = $(this);
 
         // Add error message container.
@@ -43,6 +43,17 @@
           options.preferredCountries = JSON.parse($telephone.attr('data-webform-telephone-international-preferred-countries'));
         }
 
+        var localization = 'en';
+        if ($telephone.attr('data-webform-telephone-international-i18n-use-site-language')) {
+          localization = drupalSettings.langcode;
+        }
+        else if ($telephone.attr('data-webform-telephone-international-i18n')) {
+          localization = $telephone.attr('data-webform-telephone-international-i18n');
+        }
+
+        const module = await import(drupalSettings.webform.intlTelInput.i18nPath + localization + '/index.js');
+        options.i18n = module.default;
+
         options = $.extend(options, Drupal.webform.intlTelInput.options);
 
         // Allow custom options.
@@ -50,7 +61,8 @@
           options = $.extend(true, options, JSON.parse($telephone.attr('data-options')));
         }
 
-        $telephone.intlTelInput(options);
+        window.intlTelInput(this, options);
+        const iti = intlTelInput.getInstance(this);
 
         var reset = function () {
           $telephone.removeClass('error');
@@ -58,7 +70,7 @@
         };
 
         var validate = function () {
-          return Drupal.webformTelephoneInternationalValidate($telephone, $error);
+          return Drupal.webformTelephoneInternationalValidate($telephone, iti, $error);
         };
 
         $telephone.on('blur', function () {
@@ -92,14 +104,16 @@
    *
    * @param {jQuery} $telephone
    *   A telephone element.
+   * @param {Object} iti
+   *   An intlTelInput instance.
    * @param {jQuery} $error
    *   A error element.
    *
    * @returns {boolean}
    *   Returns true if the telephone number is valid; otherwise, false.
    */
-  Drupal.webformTelephoneInternationalValidate = function ($telephone, $error) {
-    if (!$telephone.val().trim() || $telephone.intlTelInput('isValidNumber') !== false) {
+  Drupal.webformTelephoneInternationalValidate = function ($telephone, iti, $error) {
+    if (!$telephone.val().trim() || iti.isValidNumber() !== false) {
       return true;
     }
 
diff --git a/src/Hook/WebformHooks.php b/src/Hook/WebformHooks.php
index a8ba6318b96cbd6b67e2207ce913d04c4ffba899..8b359c82f13538a3653d3151aafdc19cd3105647 100644
--- a/src/Hook/WebformHooks.php
+++ b/src/Hook/WebformHooks.php
@@ -487,6 +487,10 @@ class WebformHooks {
         $attachments['#attached']['drupalSettings']['webform']['dialog']['entity_id'] = $source_entity->id();
       }
     }
+
+    // Send along current langcode for proper translation.
+    $attachments['#attached']['drupalSettings']['langcode'] = \Drupal::languageManager()->getCurrentLanguage()->getId();
+
     // Attach webform more element to token token help.
     // @see webform_token_info_alter()
     if ($route_name === 'help.page' && \Drupal::routeMatch()->getRawParameter('name') === 'token') {
diff --git a/src/Plugin/WebformElement/Telephone.php b/src/Plugin/WebformElement/Telephone.php
index 471b381d3bb320a0d23224f7d9c841f94a8e6b58..d75dcbfabc3fbb4593b350662d8d07edc902ee9a 100644
--- a/src/Plugin/WebformElement/Telephone.php
+++ b/src/Plugin/WebformElement/Telephone.php
@@ -63,11 +63,13 @@ class Telephone extends TextBase {
    */
   protected function defineDefaultProperties() {
     $properties = [
-      'input_hide' => FALSE,
-      'multiple' => FALSE,
-      'international' => FALSE,
-      'international_initial_country' => '',
-      'international_preferred_countries' => [],
+        'input_hide' => FALSE,
+        'multiple' => FALSE,
+        'international' => FALSE,
+        'international_initial_country' => '',
+        'international_preferred_countries' => [],
+        'international_i18n_use_site_language' => FALSE,
+        'international_i18n' => '',
     ] + parent::defineDefaultProperties() + $this->defineDefaultMultipleProperties();
     // Add support for telephone_validation.module.
     if ($this->moduleHandler->moduleExists('telephone_validation')) {
@@ -108,6 +110,15 @@ class Telephone extends TextBase {
       if (!empty($element['#international_preferred_countries'])) {
         $element['#attributes']['data-webform-telephone-international-preferred-countries'] = Json::encode($element['#international_preferred_countries']);
       }
+      if (!empty($element['#international_i18n_use_site_language'])) {
+        $element['#attributes']['data-webform-telephone-international-i18n-use-site-language'] = strval($element['#international_i18n_use_site_language']);
+      }
+      if (!empty($element['#international_i18n'])) {
+        $element['#attributes']['data-webform-telephone-international-i18n'] = $element['#international_i18n'];
+      }
+      else {
+        $element['#attributes']['data-webform-telephone-international-i18n'] = 'en';
+      }
 
       // The utilsScript is fetched when the page has finished loading to
       // prevent blocking.
@@ -119,11 +130,14 @@ class Telephone extends TextBase {
         $intl_tel_input_library = $this->libraryDiscovery->getLibraryByName('webform', 'libraries.jquery.intl-tel-input');
         $cdn = reset($intl_tel_input_library['cdn']);
         $utils_script = $cdn . 'build/js/utils.js';
+        $i18n_path = $cdn . 'build/js/i18n/';
       }
       else {
         $utils_script = base_path() . $library_path . '/build/js/utils.js';
+        $i18n_path = base_path() . $library_path . '/build/js/i18n/';
       }
       $element['#attached']['drupalSettings']['webform']['intlTelInput']['utilsScript'] = $utils_script;
+      $element['#attached']['drupalSettings']['webform']['intlTelInput']['i18nPath'] = $i18n_path;
     }
 
     if ($this->moduleHandler->moduleExists('telephone_validation')) {
@@ -184,12 +198,37 @@ class Telephone extends TextBase {
       ],
     ];
     $this->elementManager->processElement($form['telephone']['international_preferred_countries']);
+    $form['telephone']['international_i18n_use_site_language'] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t('Use selected site language for localization of country names'),
+      '#description' => $this->t('Specify whether to use the currently selected site language for country localization. If not set, use the language code entered below.'),
+      '#return_value' => TRUE,
+      '#states' => [
+        'visible' => [':input[name="properties[international]"]' => ['checked' => TRUE]],
+      ],
+    ];
+    $form['telephone']['international_i18n'] = [
+      '#title' => $this->t('Code language for localization of country names'),
+      '#type' => 'textfield',
+      '#size' => 5,
+      '#description' => $this->t('Specify existing code language from intl-tel-input library. If not set, use English.'),
+      '#states' => [
+        'visible' => [
+          [':input[name="properties[international]"]' => ['checked' => TRUE]],
+          'and',
+          [':input[name="properties[international_i18n_use_site_language]"]' => ['checked' => FALSE]],
+        ],
+      ],
+    ];
+    $this->elementManager->processElement($form['telephone']['international_i18n']);
 
     if ($this->librariesManager->isExcluded('jquery.intl-tel-input')) {
       $form['telephone']['#access'] = FALSE;
       $form['telephone']['international']['#access'] = FALSE;
       $form['telephone']['international_initial_country']['#access'] = FALSE;
       $form['telephone']['international_preferred_countries']['#access'] = FALSE;
+      $form['telephone']['international_i18n_use_site_language']['#access'] = FALSE;
+      $form['telephone']['international_i18n']['#access'] = FALSE;
     }
 
     // Add support for telephone_validation.module.
diff --git a/src/WebformLibrariesManager.php b/src/WebformLibrariesManager.php
index 7484fc5a4b3e1cffe33f1eea6875bb5d680e7c2c..5dd41b9b8bccdd708ce128d9ebe22c6ec0342205 100644
--- a/src/WebformLibrariesManager.php
+++ b/src/WebformLibrariesManager.php
@@ -351,8 +351,8 @@ class WebformLibrariesManager implements WebformLibrariesManagerInterface {
       'description' => $this->t("A jQuery plugin for entering and validating international telephone numbers. It adds a flag dropdown to any input, detects the user's country, displays a relevant placeholder and provides formatting/validation methods."),
       'notes' => $this->t('International Telephone Input is used by the Telephone element.'),
       'homepage_url' => Url::fromUri('https://github.com/jackocnr/intl-tel-input'),
-      'download_url' => Url::fromUri('https://github.com/jackocnr/intl-tel-input/archive/refs/tags/v17.0.19.zip'),
-      'version' => '17.0.19',
+      'download_url' => Url::fromUri('https://github.com/jackocnr/intl-tel-input/archive/refs/tags/v24.1.1.zip'),
+      'version' => '24.1.1',
       'license' => 'MIT',
     ];
     $libraries['jquery.rateit'] = [
diff --git a/tests/modules/webform_test/config/install/webform.webform.test_element_telephone.yml b/tests/modules/webform_test/config/install/webform.webform.test_element_telephone.yml
index 8bd2de416e3d65664e2ad7846f1e16828d07009f..d403e81311ff915d88e40ea4ee51189b16672f2d 100644
--- a/tests/modules/webform_test/config/install/webform.webform.test_element_telephone.yml
+++ b/tests/modules/webform_test/config/install/webform.webform.test_element_telephone.yml
@@ -46,6 +46,16 @@ elements: |
     '#international': true
     '#international_preferred_countries':
       - ZW
+  tel_i18n:
+    '#type': tel
+    '#title': tel_i18n
+    '#international': true
+    '#international_i18n': 'en'
+  tel_i18n_use_site_language:
+    '#type': tel
+    '#title': tel_i18n_use_site_language
+    '#international': true
+    '#international_i18n_use_site_language': true
 css: ''
 javascript: ''
 settings:
diff --git a/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php b/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php
index d44f910b31a4672c88f0d2eeea5547a49ef9f6a9..b1d6886ac9fcbbb24d7bfa34dc5f87d59e9ba0dc 100644
--- a/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php
+++ b/tests/src/Functional/Element/WebformElementPluginPropertiesTest.php
@@ -1520,6 +1520,8 @@ tel:
   international: false
   international_initial_country: ''
   international_preferred_countries: {  }
+  international_i18n: ''
+  international_i18n_use_site_language: false
   label_attributes: {  }
   maxlength: null
   minlength: null
diff --git a/webform.libraries.yml b/webform.libraries.yml
index ad8c2ca72e73905aa0a70a06620d3f029ea5a31c..570a939f758d89bd4aee3dda78fb0d0be2e863fc 100644
--- a/webform.libraries.yml
+++ b/webform.libraries.yml
@@ -810,7 +810,7 @@ webform.element.states:
 
 webform.element.telephone:
   js:
-    js/webform.element.telephone.js: {}
+    js/webform.element.telephone.js: { attributes: { type: module } }
   dependencies:
     - core/drupal
     - core/jquery
@@ -1024,20 +1024,19 @@ libraries.jquery.inputmask:
 
 libraries.jquery.intl-tel-input:
   remote: https://github.com/jackocnr/intl-tel-input
-  version: 'v17.0.19'
+  version: 'v24.1.1'
   license:
     name: MIT
     url: https://github.com/jackocnr/intl-tel-input/blob/master/LICENSE
     gpl-compatible: true
   directory: jquery.intl-tel-input
   cdn:
-    /libraries/jquery.intl-tel-input/: https://cdn.jsdelivr.net/gh/jackocnr/intl-tel-input@v17.0.19/
+    /libraries/jquery.intl-tel-input/: https://cdn.jsdelivr.net/gh/jackocnr/intl-tel-input@v24.1.1/
   css:
     component:
       /libraries/jquery.intl-tel-input/build/css/intlTelInput.min.css: { minified: true }
   js:
     /libraries/jquery.intl-tel-input/build/js/intlTelInput.min.js: { minified: true }
-    /libraries/jquery.intl-tel-input/build/js/intlTelInput-jquery.min.js: { minified: true }
 
   dependencies:
     - core/jquery
