I’ve added the following code as a plugin and I get most of WooCommerce translated. Try it and see if it work for you.
add_action('pll_language_defined', 'woopll_init');
function woopll_init(){
if (function_exists('pll_get_post')){ // is Polylang activated?
add_filter('wc_checkout_params', 'add_language_parameter_to_ajax_url');
add_filter('wc_cart', 'add_language_parameter_to_ajax_url');
add_filter('wc_cart_fragments_params', 'add_language_parameter_to_ajax_url');
add_filter('wc_add_to_cart_params', 'add_language_parameter_to_ajax_url');
add_filter('woocommerce_get_cart_page_id', 'pll_woocommerce_get_cart_page_id');
add_filter('woocommerce_get_checkout_page_id', 'pll_woocommerce_get_checkout_page_id');
add_filter('woocommerce_get_shop_page_id', 'pll_woocommerce_get_shop_page_id');
add_filter('woocommerce_get_pay_page_id', 'pll_woocommerce_get_pay_page_id');
function pll_woocommerce_get_cart_page_id($id) {
return pll_get_post(get_option('woocommerce_cart_page_id'));
}
function pll_woocommerce_get_checkout_page_id($id) {
return pll_get_post(get_option('woocommerce_checkout_page_id'));
}
function pll_woocommerce_get_shop_page_id($id) {
return pll_get_post(get_option('woocommerce_shop_page_id'));
}
function pll_woocommerce_get_pay_page_id($id) {
return pll_get_post(get_option('woocommerce_pay_page_id'));
}
}
}
function add_language_parameter_to_ajax_url($woocommerce_params){
if(pll_current_language() !== pll_default_language()){
$woocommerce_params['ajax_url'] = add_query_arg('lang', ICL_LANGUAGE_CODE, $woocommerce_params['ajax_url']);
}
return $woocommerce_params;
}