URL-kódolt shortcode-ok fordítása
Hogyan teheted fordíthatóvá az URL-kódolt, JSON-t tartalmazó shortcode-ok szövegeit, például a WPBakery Progress Bar elemét.
Egyes témák és bővítmények URL-kódolt shortcode-okat használnak. Ilyen például a WPBakery Page Builder Progress Bar, Round Chart és Line Chart modulja. Ez a fejezet azt mutatja meg, hogyan fordíthatók az ilyen shortcode-ok szövegei.
Mi az az URL-kódolt shortcode?
Szekció neve “Mi az az URL-kódolt shortcode?”Ha beszúrsz egy ilyen elemet, és a szerkesztőt szöveges (Text) módra váltod, a shortcode így néz ki:
[vc_progress_bar values="%5B%7B%22label%22%3A%22Development%20Test%22%2C%22value%22%3A%2290%22%7D%2C%7B%22label%22%3A%22Design%20Test%22%2C%22value%22%3A%2280%22%7D%2C%7B%22label%22%3A%22Marketing%22%2C%22value%22%3A%2270%22%2C%22color%22%3A%22bar_blue%22%7D%5D" title="Progress Bar Title Test" units="%"]A values érték URL-dekódolás után JSON-tömb:
[{"label":"Development Test","value":"90"},{"label":"Design Test","value":"80"},{"label":"Marketing","value":"70","color":"bar_blue"}]A JSON dekódolása után PHP-tömb lesz belőle:
array ( 0 => array ( 'label' => 'Development Test', 'value' => '90' ), 1 => array ( 'label' => 'Design Test', 'value' => '80' ), 2 => array ( 'label' => 'Marketing', 'value' => '70', 'color' => 'bar_blue' ),)Ez belső folyamat, neked nem kell beavatkoznod.
Az értékek fordíthatóvá tétele
Szekció neve “Az értékek fordíthatóvá tétele”A szöveges mezők (itt a label és a value) két lépésben válnak fordíthatóvá.
- Add a shortcode-ot a
wpml-config.xmlfájlhoz. A szokásos shortcode-bejegyzés mellett add meg atype="area"és azencoding="urlencoded_json"attribútumot is a kódolt mezőnél:
<shortcode> <tag>vc_progress_bar</tag> <attributes> <attribute encoding="allow_html_tags">title</attribute> <attribute type="area" encoding="urlencoded_json">values</attribute> </attributes></shortcode>- Add a következő kódot a témád
functions.phpfájljához.
add_filter( 'wpml_pb_shortcode_encode', 'wpml_pb_shortcode_encode_urlencoded_json', 10, 3 );function wpml_pb_shortcode_encode_urlencoded_json( $string, $encoding, $original_string ) { if ( 'urlencoded_json' === $encoding ) { $output = array(); foreach ( $original_string as $combined_key => $value ) { $parts = explode( '_', $combined_key ); $i = array_pop( $parts ); $key = implode( '_', $parts ); $output[ $i ][ $key ] = $value; } $string = urlencode( json_encode( $output ) ); } return $string;}
add_filter( 'wpml_pb_shortcode_decode', 'wpml_pb_shortcode_decode_urlencoded_json', 10, 3 );function wpml_pb_shortcode_decode_urlencoded_json( $string, $encoding, $original_string ) { if ( 'urlencoded_json' === $encoding ) { $rows = json_decode( urldecode( $original_string ), true ); $string = array(); foreach ( $rows as $i => $row ) { foreach ( $row as $key => $value ) { if ( in_array( $key, array( 'text', 'title', 'features', 'substring', 'btn_text', 'label', 'value', 'y_values' ) ) ) { $string[ $key . '_' . $i ] = array( 'value' => $value, 'translate' => true ); } else { $string[ $key . '_' . $i ] = array( 'value' => $value, 'translate' => false ); } } } } return $string;}A kód legfontosabb sora az in_array( $key, array( ... ) ) feltétel. Ide azokat a kulcsokat kell felvenned, amelyek a dekódolt JSON-tömbben szerepelnek, és fordítani akarod őket. A példában ez a label és a value.
Ezután a fordítószerkesztőben megjelennek a shortcode-ok label és value mezői, és fordíthatók. A wpml-config.xml fájlról a nyelvi konfigurációs fájl fejezetben, az oldalépítő-tartalom regisztrálásáról az Oldalépítő-tartalom regisztrálása fejezetben olvashatsz.
Készült: