PepeFernandez Posted April 11 Share Posted April 11 (edited) 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: Alguien sabe o se le ocurre alguna forma para poder traducir este campo? Gracias. Edited May 10 by PepeFernandez the topic is solved (see edit history) Link to comment Share on other sites More sharing options...
ComGrafPL Posted April 11 Share Posted April 11 Parece que fue un caso hace algún tiempo: https://github.com/PrestaShop/PrestaShop/issues/12901 https://prestashow.com/es/prestashop-modules/3-traduccion-de-bus-names-prestashop.html 1 Link to comment Share on other sites More sharing options...
PepeFernandez Posted April 12 Author Share Posted April 12 10 hours ago, ComGrafPL said: Parece que fue un caso hace algún tiempo: https://github.com/PrestaShop/PrestaShop/issues/12901 https://prestashow.com/es/prestashop-modules/3-traduccion-de-bus-names-prestashop.html 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 More sharing options...
PepeFernandez Posted May 10 Author Share Posted May 10 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 partevar 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 More sharing options...
PepeFernandez Posted May 30 Author Share Posted May 30 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: 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 More sharing options...
Joe_e Posted July 6 Share Posted July 6 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: 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 More sharing options...
ventura Posted July 8 Share Posted July 8 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 More sharing options...
Joe_e Posted July 17 Share Posted July 17 @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. Link to comment Share on other sites More sharing options...
PepeFernandez Posted July 19 Author Share Posted July 19 (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 July 19 by PepeFernandez missing info (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now