Jump to content

[SOLUCIONADO] Traducir el nombre del transportista


Recommended Posts

Buenas, quizá el nombre del transportista esté pensado para que sea SEUR, CORREOS o algo por el estilo, yo siempre lo he estado usando mas bien como método de envío o algo parecido, estoy tratando de internacionalizar la web y tengo el problema que el campo nombre del transportista no me deja traducirlo como podéis ver en la siguiente imagen:
image.thumb.png.47c704ef6c0d4220d95443a72ff5e93e.png

Alguien sabe o se le ocurre alguna forma para poder traducir este campo?
Gracias.

 

image.png

Edited by PepeFernandez
the topic is solved (see edit history)
Link to comment
Share on other sites

10 hours ago, ComGrafPL said:

Buenas, muchas gracias por tu respuesta.
Etoy echandole un ojo a ese hilo de github, en cuanto al modulo que sugieres lo vi antes de poner este hilo, pero los idiomas en los que pone que está disponible no coinciden con los de mi web y es de pago.

Link to comment
Share on other sites

  • 4 weeks later...

Para el que le pueda interesar, he solucionado mi problema, quizá no es la mejor manera ni la mas elegante pero es funcional. lo que he hecho ha sido irme a themes/child_classic/assets/js/custom.js y he creado el siguiente script:
 

   let changeCarriersNames = function () {
   
      if (document.querySelector('.delivery-options-list')) {
            // Obtener el idioma desde la URL
         var language = window.location.pathname.split('/')[1]; // Obtener el segmento del idioma desde la URL

         var carrierTranslations = {
            'Paquetería postal': {
               'es': 'Paquetería postal',
               'fr': 'Service postal',
               'en': 'Postal Service',
               'de': 'Postdienst',
               'pt': 'Serviço postal',
               'nl': 'Postdienst'
            },
            'Envío en camión': {
               'es': 'Envío en camión con entrega concertada',
               'fr': 'Livraison en camion avec rendez-vous prévu',
               'en': 'Truck Delivery with Scheduled Delivery',
               'de': 'LKW-Zustellung mit vereinbarter Lieferung',
               'pt': 'Entrega em caminhão com entrega programada',
               'nl': 'Vrachtwagenlevering met geplande levering'
            }
         };

         // Obtener todos los elementos .delivery-option
         var deliveryOptions = document.querySelectorAll('.delivery-option');

         deliveryOptions.forEach(function(deliveryOption) {
            
            var carrierSpan = deliveryOption.querySelector('.carrier-name');
            if (carrierSpan) {
                  var carrierOriginalName = carrierSpan.textContent.trim();

                  // Verificar si hay una traducción disponible
                  if (carrierTranslations[carrierOriginalName] && carrierTranslations[carrierOriginalName][language]) {
                     carrierSpan.textContent = carrierTranslations[carrierOriginalName][language];
                  } else {
                     console.warn("No se encontró una traducción para el transportista:", carrierOriginalName, "en el idioma:", language);
                  }
            } else {
                  console.warn("No se encontró el elemento '.carrier-name' dentro del elemento .delivery-option:", deliveryOption);
            }
         });
      }
   }

   changeCarriersNames();

Después ir al backoffice/admin en Configurar->Parámetros Avanzados->Rendimiento y borrar la caché.

*Nota: debes cambiar el array 'carrierTranslations' según tus necesidades, el primer campo corresponde al nombre de tu transportista el que tengas en la columna 'Nombre' de la página Personalizar->Transporte->Transportistas de tu backoffice/admin y debajo las traducciones, puedes usar cualquier idioma de tu tienda, pues lo coge desde la url es decir "tutienda.com/es/pagina.html" aquí coge el /es que pertenece al idioma español, si por alguna razón tu tienda tiene el idioma en otra parte por ejemplo "tutienda.com/xxx/es/pagina.html" deberás cambiar el split de la parte
var language = window.location.pathname.split('/')[1];
en este caso sería var language = window.location.pathname.split('/')[2]; este split funciona de la siguiente manera "tutienda.com/1/2/3/4..." aunque lo mas seguro es que esté en la primera posición y no necesites cambiarlo, cuento esto para los que no sepan programar aunque dudo que se encuentren con este problema

Se que no es la mejor manera, ya que si quieres cambiar las traducciones, agregar o quitar transportistas, debes cambiar el código, pero de momento no he encontrado ninguna otra forma gratuita que resuelva este problema, han mencionado aquí un módulo pero en la descripción no figura que esté disponible para todos mis idiomas por lo que no he querido compararlo

Link to comment
Share on other sites

  • PepeFernandez changed the title to [SOLUCIONADO] Traducir el nombre del transportista
  • 3 weeks later...

Tengo un método algo mejor sin necesidad de javascript:

primero agregamos las traducciones a la base de datos en la tabla ps_translation por ejemplo:

image.png.eefda971cddfc22b71ce3d90c69a53e5.png


y luego simplemente buscamos donde aparezca nuestros transportistas, por ejemplo en el archivo shipping.tpl ubicado en themes/myTheme/templates/checkout/_partials/steps/shipping.tpl y buscamos donde pone $carrier.name y reemplazamos por la traducción con el dominio que hayamos puesto, en este caso ShopPdf sería algo así:
{l s=$carrier.name d='Shop.Pdf' pdf='true'}

Limpiamos caché y listo, ahora ya no hay que cargar javascript en la página y puedes editar las traducciones desde la base de datos sin tener que tocar código cada vez que quieras cambiar o agregar una.

Link to comment
Share on other sites

  • 1 month later...
On 5/30/2024 at 8:56 AM, PepeFernandez said:

Tengo un método algo mejor sin necesidad de javascript:

primero agregamos las traducciones a la base de datos en la tabla ps_translation por ejemplo:

image.png.eefda971cddfc22b71ce3d90c69a53e5.png


y luego simplemente buscamos donde aparezca nuestros transportistas, por ejemplo en el archivo shipping.tpl ubicado en themes/myTheme/templates/checkout/_partials/steps/shipping.tpl y buscamos donde pone $carrier.name y reemplazamos por la traducción con el dominio que hayamos puesto, en este caso ShopPdf sería algo así:
{l s=$carrier.name d='Shop.Pdf' pdf='true'}

Limpiamos caché y listo, ahora ya no hay que cargar javascript en la página y puedes editar las traducciones desde la base de datos sin tener que tocar código cada vez que quieras cambiar o agregar una.

@PepeFernandez Hola Pepe, he hecho todo según tu comentario, sin éxito. ¿Queda algo especial por hacer para poder ver los cambios?

Link to comment
Share on other sites

Puedes acceder al id y al iso_code del idioma seleccionado utilizado el objeto prestashop, eg:


if (typeof prestashop !== 'undefined') {
    // Accede al idioma seleccionado
    var languageIsoCode = prestashop.language.iso_code;
    var languageId = prestashop.language.id;

    console.log("Idioma ISO Code:", languageIsoCode);
    console.log("Idioma ID:", languageId);
} else {
    console.log("El objeto prestashop no está disponible.");
}

 

Link to comment
Share on other sites

  • 2 weeks later...

@ventura Hola Ventura. Gracias por tu respuesta sobre esto. Todo lo que intento descubrir es cómo utilizar las traducciones de la base de datos en la plantilla de correo electrónico "order_conf". Necesito usar algo basado en traducciones para cada lang_id (solución de base de datos de Pepe) en lugar de {carrier} (ver imagen), lo cual no es ideal.

IMG_01.png

Link to comment
Share on other sites

Posted (edited)
En 6/7/2024 a las 9:31 PM, Joe_e dijo:

@PepeFernandez Hola Pepe, he hecho todo según tu comentario, sin éxito. ¿Queda algo especial por hacer para poder ver los cambios?

buenas si no te está funcionando es porque el carrier lo está sacando de otra manera, seguramente usas algun tema o alguna configuración distinta.

si has puesto las traducciones en la base de datos, debes buscar el fichero donde saca el nombre del carrier y sustituirlo por {l s=$carrier.name d='Shop.Pdf' pdf='true'}


en mi caso aparece con la variable $carrier.name en la plantilla, pero podría ser de otra forma, por ejemplo imagina que tienes:

<div>carrier: {$selected_carrier} </div>

entonces la etiqueta que debes usar es {l s=$selected_carrier d='Shop.Pdf' pdf='true'}

y asegurarte que la variable contiene lo que has puesto en el campo key de la tabla, asegurate también que los campos sean correctos yo he utilizado shop pdf y mi tema child_classic, pero podría variar en tu caso.

Edited by PepeFernandez
missing info (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...