Задать вопрос

Как перевести единицы измерения (kg, m, cm) в WooCommerce?

Никак не получается перевести единицы измерения в WooCommerce. В .po файле перевод есть, но на сайте в карточке товара они отображаются на английском языке
92bf9d8387a84049a8e6129c95cddd02.png

При этом не помогает даже изменение кода WooCommerce

class-wc-settings-products.php

array(
					'title'    => __( 'Weight Unit', 'woocommerce' ),
					'desc'     => __( 'This controls what unit you will define weights in.', 'woocommerce' ),
					'id'       => 'woocommerce_weight_unit',
					'class'    => 'wc-enhanced-select',
					'css'      => 'min-width:300px;',
					'default'  => 'kg',
					'type'     => 'select',
					'options'  => array(
						'kg'  => __( 'кг', 'woocommerce' ),
						'g'   => __( 'г', 'woocommerce' ),
						'lbs' => __( 'лбс', 'woocommerce' ),
						'oz'  => __( 'оз', 'woocommerce' ),
					),
					'desc_tip' =>  true,
				),
  • Вопрос задан
  • 3523 просмотра
Подписаться 6 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 4
@Kinolanka Автор вопроса
Порылся в коде и понял, что это баг Вукоммерс. Единицы измерения выводяться в таб с аттрибутами не оборачиваясь в функции локализации.

Локализация единиц измерения веса

Вывод осуществляется в файле
.../plugins/woocommerce/templates/single-product/product-attributes.php

Этот файл нужно скопировать к себе в тему и расположить по адресу:
.../themes/[MY-THEME]/woocommerce/single-product/product-attributes.php

После этого внести в него изменения:

Строка 39
<td class="product_weight"><?php echo wc_format_localized_decimal( $product->get_weight() ) . ' ' . esc_attr( get_option( 'woocommerce_weight_unit' ) ); ?></td>


Нужно обернуть esc_attr( get_option( 'woocommerce_weight_unit' ) ) в функцию __()

<td class="product_weight"><?php echo wc_format_localized_decimal( $product->get_weight() ) . ' ' . __(esc_attr( get_option( 'woocommerce_weight_unit' ) ), 'woocommerce'); ?></td>


Локализация единиц измерения длины

К сожалению, значение длины выводиться функцией get_dimensions(), которая прописана в ядре и ее нельзя переписывать. Функция возвращает уже полную строку с цифрами и единицей измерения. Но перед выводом строка пропускается через фильтр woocommerce_product_dimensions.

В файле functions.php можно заменить значения единицы длины с английского языка на русский.

function localize_demensions_units($dimensions) {
    return str_replace('m', 'м', $dimensions);
}
add_filter('woocommerce_product_dimensions', 'localize_demensions_units');


Нужно подставить нужные значения.
Ответ написан
@Andre_Ko
Чтобы локализовать единицы измерения веса

function localize_weight_units($weight) {
    return str_replace('kg', 'кг', $weight);
}
add_filter('woocommerce_format_weight', 'localize_weight_units');
Ответ написан
@hymmi
У меня фильтр woocommerce_product_dimensions - не сработал. Поменяла его на woocommerce_format_dimensions - и все ок.
Ответ написан
Комментировать
SkiF_TLT
@SkiF_TLT
Проблема существует до сих пор, но сейчас она в файле wp-content\plugins\woocommerce\includes\wc-formatting-functions.php:1271:

$weight_string .= ' ' . get_option( 'woocommerce_weight_unit' );


По-хорошему должно быть:

$weight_string .= ' ' . __(get_option( 'woocommerce_weight_unit' ), 'woocommerce' );


Для фикса размеров надо провести аналогичные манипуляции с методом wc_format_dimensions в том же файле.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы