Vai al contenuto Vai alla barra laterale

Questo thread è stato risolto. Ecco una descrizione del problema e della soluzione.

Problema:
Il cliente sta cercando di sincronizzare i prezzi in inglese con quelli in italiano e tradurre i badge "disponibile" e "fuori stagione" che sono stati implementati tramite il

functions.php

di WordPress.

Soluzione:
1. Assicurati che il testo nel

functions.php

sia internazionalizzato usando le funzioni di WordPress "gettext": https://developer.wordpress.org/themes/functionality/internationalization/.

2. Scansiona il tema per trovare il codice con il testo codificato: https://wpml.org/documentation/getting-started-guide/string-translation/finding-strings-that-dont-appear-on-the-string-translation-page/ (sezione "translatable hard-coded text").

3. Vai su WPML > Traduzione stringhe per trovare e tradurre le stringhe.

Questo è il forum di assistenza tecnica di WPML, il plug-in multilingue di WordPress.

La sua lettura è permessa a tutti, ma la pubblicazione è riservata esclusivamente ai clienti di WPML. Il team di WPML risponde sul forum 6 giorni su 7, 22 ore su 24.

Questo ticket contiene 11 risposte, ha 2 voci.

Ultimo aggiornamento da Alejandro 1 anno, 12 mese fa.

Assistito da: Alejandro.

Autore Post
Dicembre 11, 2023 alle 9:01 pm #15040881

emanueleA-9

Sto tentando di: modificare i prezzi in inglese, che non sono sincronizzati a quelli in italiano.

Link a una pagina dove è possibile vedere il problema: Prezzi corretti: link nascosto
Prezzi sbagliati: link nascosto

Dicembre 12, 2023 alle 8:44 am #15043139

Alejandro
Sostenitore di WPML dal 02/2018

Lingue: Inglese (English ) Spagnolo (Español ) Italiano (Italiano )

Fuso orario: Europe/Rome (GMT+02:00)

Ciao!

Puoi assicurarti che quei prodotti sono effettivamente traduzioni? te lo chiedo perché io non vedo niente in inglese in quel sito.

Ricordati che la homepage del sito deve esistere in Inglese e deve essere pubblica, non una bozza. lo stesso vale per lo shop, e i prodotti devono essere collegati tra di loro per considerarsi traduzioni.

In questo momento magari hai nascosto la lingua inglese oppure il contenuto è ancora in bozza perché io non posso vedere niente in Inglese.

Fammi sapere per capire come continuare.

Dicembre 12, 2023 alle 10:00 am #15043935

emanueleA-9

Salve, l'inglese attualmente è nascosto per evitare che la gente vi entri dato che il sito è pubblico, e i prezzi non sono corretti, ho già utilizzato wpml in molti siti ed adottato sempre lo stesso procedimento, tutto nel sito risulta tradotto, anche i prodotti stessi risultano tradotti, ma i prezzi non sono sincronizzati, vuole che le crei un'accesso per verificare?

Dicembre 12, 2023 alle 10:11 am #15044045

Alejandro
Sostenitore di WPML dal 02/2018

Lingue: Inglese (English ) Spagnolo (Español ) Italiano (Italiano )

Fuso orario: Europe/Rome (GMT+02:00)

A questo punto, si, se tutto è nascosto non avrei un altro modo di verificare cosa potrebbe creare questo problema.

Per favore inserisci le credenziali di accesso nei campi che ho abilitato in questa prossima risposta e poi dammi un prodotto di riferimento da usare come esempio.

Saluti.

Dicembre 12, 2023 alle 10:38 am #15044289

emanueleA-9

Non so come sia possibile, ma mentre cercavo un prodotto da darle come test mi sono reso conto che adesso sono tutti sincronizzati

Dicembre 12, 2023 alle 10:52 am #15044435

Alejandro
Sostenitore di WPML dal 02/2018

Lingue: Inglese (English ) Spagnolo (Español ) Italiano (Italiano )

Fuso orario: Europe/Rome (GMT+02:00)

1) Se hai cache nel sito o nel server, potrebbe essere che si è pulito e quindi stai vedendo una versione reale e non in cache.

2) Vai su WPML > Assistenza e controlla la sezione PHP e quella WordPress, specificamente della memoria. se hai un uso di memoria attuale di 200M o un po' superiore, allora potrebbe essere che non avevi abbastanza memoria.

Per il resto, puoi sempre "forzare" questi cambiamenti andando su WooCommerce > WooCommerce Multilingual & Multicurrency > Impostazioni > Soluzione dei problemi. ci sono diverse opzioni lì, puoi selezionarle e cliccare il pulsante per avviarle. non è necessario di solio ma potrebbe aiutarti.

Dicembre 12, 2023 alle 1:27 pm #15046463

emanueleA-9

Perfetto, invece un'altra cosa nell'inglese dentro la sezione shop, vi sono i prodotti con il badge "disponibile" e "fuori stagione" che sono stati implementati tramite il function.php di wordpress, come faccio a tradurre quelli?

Dicembre 12, 2023 alle 3:21 pm #15047141

Alejandro
Sostenitore di WPML dal 02/2018

Lingue: Inglese (English ) Spagnolo (Español ) Italiano (Italiano )

Fuso orario: Europe/Rome (GMT+02:00)

1)Se sono nel functions.php, allora devono essere prima di tutto internazionalizzati usando gli standard di WordPress ovvero le funzioni "get text": https://developer.wordpress.org/themes/functionality/internationalization/

2) Successivamente scannerizza il tema dove si trova questo codice: https://wpml.org/documentation/getting-started-guide/string-translation/finding-strings-that-dont-appear-on-the-string-translation-page/ (sezione "translatable hard-coded text")

3) Vai su WPML > Traduzione stringhe e qui troverai le stringhe.

--------------

Disclaimer: noi non possiamo fare il codice per te visto che è fuori dallo scopo del supporto che offriamo, però possiamo guidarti dove necessario. puoi inviare il codice se non ci riesci da solo e posso provare a guidarti sul da fare.

--------------

Saluti.

Dicembre 12, 2023 alle 3:45 pm #15047543

emanueleA-9

/** Notifica quanto per la alla spedizione gratuita nel carrello */
function rrob_avviso_sped_free() {

$min_free = 39; // importo minimo per spedizione gratuita impostato su WooCommerce

$cart_now = WC()->cart->subtotal;

if ( $cart_now < $min_free ) {
$added_text = '<p>Lo sai che aggiungendo solo ' . wc_price( $min_free - $cart_now ) . ' al carrello la spedizione è gratuita?</p>';
$notice = sprintf( $added_text );
wc_print_notice( $notice, 'error' );
}
}
add_action( 'woocommerce_before_cart', 'rrob_avviso_sped_free' );

// Aggiungi un badge "Fuori Stagione" in sovraimpressione sull'immagine del prodotto
function aggiungi_badge_fuori_stagione_sovraimpressione() {
global $product;

// Verifica se il prodotto è esaurito
if (!$product->is_in_stock()) {
echo '<span class="badge-fuori-stagione-sovraimpressione">Fuori Stagione</span>';
}
}

// Aggiungi il badge in sovraimpressione sull'immagine del prodotto
add_action('woocommerce_before_shop_loop_item_title', 'aggiungi_badge_fuori_stagione_sovraimpressione', 5);

// Aggiungi un badge "Disponibile" in sovraimpressione sull'immagine del prodotto
function aggiungi_badge_disponibile_sovraimpressione() {
global $product;

// Verifica se il prodotto è disponibile
if ($product->is_in_stock()) {
echo '<span class="badge-disponibile-sovraimpressione">Disponibile</span>';
}
}

// Aggiungi il badge in sovraimpressione sull'immagine del prodotto
add_action('woocommerce_before_shop_loop_item_title', 'aggiungi_badge_disponibile_sovraimpressione', 5);

/**
* Personalizzazione del testo per i prodotti esauriti.
*/
function personalizza_testo_esaurito( $translated_text, $text, $domain ) {
// Verifica se il testo è "Esaurito" e se il tipo di post è un prodotto.
if ( 'Esaurito' === $translated_text && is_singular( 'product' ) ) {
// Verifica se è attiva la classe WC_Product e se il prodotto è fuori stock.
global $product;
if ( is_object( $product ) && method_exists( $product, 'is_in_stock' ) && ! $product->is_in_stock() ) {
$translated_text = 'Fuori Stagione';
}
}
return $translated_text;
}
add_filter( 'gettext', 'personalizza_testo_esaurito', 20, 3 );

Dicembre 12, 2023 alle 4:25 pm #15048175

Alejandro
Sostenitore di WPML dal 02/2018

Lingue: Inglese (English ) Spagnolo (Español ) Italiano (Italiano )

Fuso orario: Europe/Rome (GMT+02:00)

Come ho menzionato non ti posso fare tutto il codice ma ad esempio:

$notice = sprintf( $added_text );

puoi scambiare quel "sprintf" per __()

Guida: https://developer.wordpress.org/themes/functionality/internationalization/#add-text-domain-to-strings

In questo caso si vedrebbe più o meno così:

$notice = __( $added_text, 'Codice notifica spedizione', 'added_text' );

I parametri 2 e 3 si chiamano "contesto" e "nome" rispettivamente, il contesto serve a dare un riferimento sul DOVE si trova il codice, e il nome deve essere UNICO e dice "cosa fa" quel testo. sono testi normali, quindi decidi tu cosa mettere ma puoi usarli per raggruppare i codici appartenenti ad un progetto.

La stessa cosa puoi applicarla al "$translated_text = 'Fuori Stagione';" e testi simili.

Leggi la documentazioni per vedere i diversi gettext a tua disposizione e poi segui le istruzioni del mio messaggio di prima per capire come registrare questi testi con WPML.

Spero ti sia stato d'aiuto.

Dicembre 13, 2023 alle 10:24 am #15052687

emanueleA-9

quindi verrebbe così corretto?

/** Notifica quanto per la alla spedizione gratuita nel carrello */
function rrob_avviso_sped_free() {
$min_free = 39; // importo minimo per spedizione gratuita impostato su WooCommerce
$cart_now = WC()->cart->subtotal;

if ( $cart_now < $min_free ) {
$added_text = sprintf( __( 'Lo sai che aggiungendo solo %s al carrello la spedizione è gratuita?', 'text-domain' ), wc_price( $min_free - $cart_now ) );
$notice = sprintf( '<p>%s</p>', $added_text );
wc_print_notice( $notice, 'error' );
}
}
add_action( 'woocommerce_before_cart', 'rrob_avviso_sped_free' );

// Aggiungi un badge "Fuori Stagione" in sovraimpressione sull'immagine del prodotto
function aggiungi_badge_fuori_stagione_sovraimpressione() {
global $product;

// Verifica se il prodotto è esaurito
if ( ! $product->is_in_stock() ) {
echo '<span class="badge-fuori-stagione-sovraimpressione">' . esc_html__( 'Fuori Stagione', 'text-domain' ) . '</span>';
}
}

// Aggiungi il badge in sovraimpressione sull'immagine del prodotto
add_action( 'woocommerce_before_shop_loop_item_title', 'aggiungi_badge_fuori_stagione_sovraimpressione', 5 );

// Aggiungi un badge "Disponibile" in sovraimpressione sull'immagine del prodotto
function aggiungi_badge_disponibile_sovraimpressione() {
global $product;

// Verifica se il prodotto è disponibile
if ( $product->is_in_stock() ) {
echo '<span class="badge-disponibile-sovraimpressione">' . esc_html__( 'Disponibile', 'text-domain' ) . '</span>';
}
}

// Aggiungi il badge in sovraimpressione sull'immagine del prodotto
add_action( 'woocommerce_before_shop_loop_item_title', 'aggiungi_badge_disponibile_sovraimpressione', 5 );

/**
* Personalizzazione del testo per i prodotti esauriti.
*/
function personalizza_testo_esaurito( $translated_text, $text, $domain ) {
// Verifica se il testo è "Esaurito" e se il tipo di post è un prodotto.
if ( 'Esaurito' === $translated_text && is_singular( 'product' ) ) {
// Verifica se è attiva la classe WC_Product e se il prodotto è fuori stock.
global $product;
if ( is_object( $product ) && method_exists( $product, 'is_in_stock' ) && ! $product->is_in_stock() ) {
$translated_text = esc_html__( 'Fuori Stagione', 'text-domain' );
}
}
return $translated_text;
}
add_filter( 'gettext', 'personalizza_testo_esaurito', 20, 3 );

Dicembre 13, 2023 alle 11:19 am #15053741

Alejandro
Sostenitore di WPML dal 02/2018

Lingue: Inglese (English ) Spagnolo (Español ) Italiano (Italiano )

Fuso orario: Europe/Rome (GMT+02:00)

Se continuiamo in questo modo, probabilmente finiremo confusi entrambi.

In quel codice ci sono diverse funzioni che fanno cose diverse tra di loro quindi prima di tutto separiamole:

1) rrob_avviso_sped_free()
2) aggiungi_badge_fuori_stagione_sovraimpressione()
3) aggiungi_badge_disponibile_sovraimpressione()
4) personalizza_testo_esaurito

Nella funzione 1, vedo che hai inserito la funzione gettext dentro il sprintf. questo è il modo giusto per usare testo dinamico + hardcoded, quindi è OK.

----------------------

Nella funzione 2 e 3, forse esc_html__( 'il tuo testo va qui', 'text-domain' ) non è il miglior modo però prova lo stesso prima a vedere se compare su string translation quando scannerizzi il tema e se si traduce, altrimenti prova con

_e( 'il tuo testo va qui', 'text-domain' );

----------------------
Nella funzione 4, vedo che la usi con un filtro "gettext". Se leggi la sua documentazione: https://developer.wordpress.org/reference/hooks/gettext/ vedrai che dice che lo scopo di quel filtro è di filtrare un testo con la sua traduzione e quindi non sembra essere fatta per lo scopo che tu usi (Cambiare il testo originale).

Ti do un trucco:

- Rimuovi quella funzione (commentala, per ora), e poi scannerizza il posto da dove arriva inizialmente quest'etichetta (WooCommerce immagino? forse è quello con il testo "sale"?).

- Poi cerca la stringa originale su WPML > String Translation

- Ora cambia la lingua della stringa originale ad una lingua che non è attiva sul sito

- Ora potrai tradurre il testo originale in qualunque altra cosa + tradurlo senza bisogno di codice.

Provaci e fammi sapere come va.

Dicembre 13, 2023 alle 12:09 pm #15054365

emanueleA-9

Grandioso, sono riuscito a risolvere tutto. Grazie mille!