WPML

تستخدم بعض القوالب والإضافات أكواداً مختصرة urlencoded. على سبيل المثال، هذا هو الحال مع وحدات أداة بناء الصفحات WPBakery مثل Progress Bar أو Round Chart أو Line Chart. في هذا الدليل، نشرح كيفية تمكين ترجمة المحتوى المستخدم مع هذه الأنواع من الأكواد المختصرة.

ما هي الأكواد المختصرة «urlencoded»؟


عندما تدرج عنصراً يستخدم أكواداً مختصرة urlencoded وتبدّل محرر WordPress إلى وضع نص ، سترى أنها تبدو مشابهة لما يلي.
[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="%"]

تُفك شفرة الـ value في مثل هذه الأكواد المختصرة إلى مصفوفة مشفرة بنسق JSON مشابهة لما يلي:
[{"label":"Development Test","value":"90"},{"label":"Design Test","value":"80"},{"label":"Marketing","value":"70","color":"bar_blue"}]

وأخيراً، تُفك شفرة مخرجات JSON تلك أيضاً إلى مصفوفة مشابهة لهذه:
مصفوفة JSON مفكوكة الشفرة
array (
  0 => 
  array (
    'label' => 'Development Test',
    'value' => '90',
  ),
  1 => 
  array (
    'label' => 'Design Test',
    'value' => '80',
  ),
  2 => 
  array (
    'label' => 'Marketing',
    'value' => '70',
    'color' => 'bar_blue',
  ),
)

إذا وجدت أن هذا معقد للغاية، فلا تقلق. هذه عملية داخلية لا تحتاج أنت كمستخدم إلى التدخل فيها.

ترجمة القيم في الأكواد المختصرة «urlencoded»


الآن، دعنا نرى كيفية ترجمة جزأي الـ label والـ value من تلك المصفوفة. قبل الإصدار 3.9 من WPML، كانت ترجمة الأكواد المختصرة من هذا النوع صعبة ولكن الآن يمكن القيام بذلك في بضع خطوات بسيطة.

1. أضف الكود المختصر إلى ملف wpml-config.xml الخاص بك.


إذا لم يكن لديك واحد أو لم تكن على دراية به، فمن المفترض أن تساعدك صفحة الوثائق هذه، وخاصة قسم محتوى أداة بناء الصفحات.

في ملف wpml-config.xml، إلى جانب الكود العادي الذي تضيفه لكود مختصر، تحتاج أيضاً إلى إضافة السمتين type="area" و encoding="urlencoded_json":

الكود المختصر لـ Progress bar
<shortcode>
    <tag>vc_progress_bar</tag>
    <attributes>
        <attribute encoding="allow_html_tags">title</attribute>
        <attribute type="area" encoding="urlencoded_json">values</attribute>
    </attributes>
</shortcode>

2. أضف الكود التالي إلى ملف functions.php الخاص بقالبك.

دالة Progress bar
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;
}

يقع الجزء الأهم من الكود أعلاه في السطر التالي:

if ( in_array( $key, array( 'text', 'title', 'features', 'substring', 'btn_text', 'label', 'value', 'y_values' ) ) )

هنا، يجب عليك إضافة المفاتيح الصحيحة التي يمكنك الحصول عليها من مصفوفة JSON مفكوكة الشفرة. في مثالنا، ستكون label و value.

وهذا كل شيء! الآن، في محرر الترجمة، سترى حقلي الـ label والـ value من تلك الأكواد المختصرة وسيكونان جاهزين للترجمة.

محرر الترجمة: "label" و "value" متاحان للترجمة
محرر الترجمة: «label» و «value» متاحان للترجمة

بقلم Andrés Cifuentes · آخر تحديث 5 مارس 2018