-
-
Save egcmi/54cfd67931284e1527d70e5e409d0616 to your computer and use it in GitHub Desktop.
Translate WooCommerce mails into order language with TranslatePress before sending
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Save the current language in post_meta when checkout is processed (used to identify correct Email language) | |
add_action('woocommerce_checkout_update_order_meta', 'dartrax_save_language_on_checkout', 10, 2 ); | |
function dartrax_save_language_on_checkout( $order_id, $posted ) { | |
if( ! class_exists('TRP_Translate_Press') ) return ''; | |
global $TRP_LANGUAGE; | |
update_post_meta( $order_id, '_order_language', $TRP_LANGUAGE ); | |
} | |
// Woocommerce Shipment Mails | |
add_action( 'woocommerce_order_status_processing_to_cancelled_notification','dartrax_prepare_locale_for_Mail_with_order_id', 5, 1 ); | |
add_action( 'woocommerce_order_status_on-hold_to_cancelled_notification','dartrax_prepare_locale_for_Mail_with_order_id', 5, 1 ); | |
add_action( 'woocommerce_order_status_completed_notification','dartrax_prepare_locale_for_Mail_with_order_id', 5, 1 ); | |
add_action( 'woocommerce_new_customer_note_notification','dartrax_prepare_locale_for_Mail_with_order_id', 5, 1 ); | |
add_action( 'woocommerce_order_status_pending_to_on-hold_notification','dartrax_prepare_locale_for_Mail_with_order_id', 5, 1 ); | |
add_action( 'woocommerce_order_status_failed_to_on-hold_notification','dartrax_prepare_locale_for_Mail_with_order_id', 5, 1 ); | |
add_action( 'woocommerce_order_status_cancelled_to_on-hold_notification','dartrax_prepare_locale_for_Mail_with_order_id', 5, 1 ); | |
add_action( 'woocommerce_order_status_cancelled_to_processing_notification','dartrax_prepare_locale_for_Mail_with_order_id', 5, 1 ); | |
add_action( 'woocommerce_order_status_failed_to_processing_notification','dartrax_prepare_locale_for_Mail_with_order_id', 5, 1 ); | |
add_action( 'woocommerce_order_status_on-hold_to_processing_notification','dartrax_prepare_locale_for_Mail_with_order_id', 5, 1 ); | |
add_action( 'woocommerce_order_status_pending_to_processing_notification','dartrax_prepare_locale_for_Mail_with_order_id', 5, 1 ); | |
add_action( 'woocommerce_order_fully_refunded_notification','dartrax_prepare_locale_for_Mail_with_order_id', 5, 1 ); | |
add_action( 'woocommerce_order_partially_refunded_notification','dartrax_prepare_locale_for_Mail_with_order_id', 5, 1 ); | |
add_action( 'woocommerce_order_status_pending_to_failed_notification','dartrax_prepare_locale_for_Mail_with_order_id', 5, 1 ); | |
add_action( 'woocommerce_order_status_on-hold_to_failed_notification','dartrax_prepare_locale_for_Mail_with_order_id', 5, 1 ); | |
add_action( 'woocommerce_order_status_pending_to_completed_notification','dartrax_prepare_locale_for_Mail_with_order_id', 5, 1 ); | |
add_action( 'woocommerce_order_status_failed_to_completed_notification','dartrax_prepare_locale_for_Mail_with_order_id', 5, 1 ); | |
add_action( 'woocommerce_order_status_cancelled_to_completed_notification','dartrax_prepare_locale_for_Mail_with_order_id', 5, 1 ); | |
function dartrax_prepare_locale_for_Mail_with_order_id( $order_id ) { | |
// Get language code that may be stored in post meta data | |
$lang_code = get_post_meta($order_id, '_order_language', true); | |
if( $lang_code == '' || ! class_exists('TRP_Translate_Press') ) return ''; | |
// Set it as current active language for translatepress | |
global $TRP_LANGUAGE; | |
$TRP_LANGUAGE = $lang_code; | |
} | |
// Woocommerce Mails when resend by Admin | |
add_action( 'woocommerce_before_resend_order_emails','dartrax_prepare_locale_for_resend_Mails', 5, 2 ); | |
function dartrax_prepare_locale_for_resend_Mails( $order, $mail_type ) { | |
if( $mail_type == 'customer_invoice' ) | |
dartrax_prepare_locale_for_Mail_with_order_id( $order->get_id() ); | |
} | |
// Override Locale when WooCommerce sends an eMail | |
add_filter( 'woocommerce_email_setup_locale', function() { | |
if( ! class_exists('TRP_Translate_Press') ) return ''; | |
// Override translatepress 'locale'-function because that does not work in Admin interface | |
add_filter('locale','dartrax_force_trp_locale', 99999 + 1); | |
// Switch text domains to load the correct .po/.mo-file based translations | |
global $TRP_LANGUAGE; | |
switch_text_domains( $TRP_LANGUAGE ); | |
return false; | |
} ); | |
add_filter( 'woocommerce_email_restore_locale', function() { | |
// Undo overriding of translatepress' 'locale'-function | |
remove_filter('locale','dartrax_force_trp_locale', 99999 + 1); | |
return true; | |
} ); | |
// Override translatepress 'locale'-function because that does not deliver $TRP_LANGUAGE in Admin interface | |
function dartrax_force_trp_locale($locale) { | |
global $TRP_LANGUAGE; | |
return $TRP_LANGUAGE; | |
} | |
// Switch to another text domain. Inspired by https://gist.github.com/Jon007/5b90e78289899bc28e9c39c12ef56e60 | |
function switch_text_domains( $language ) { | |
if ( class_exists( 'TRP_Translate_Press' ) && class_exists( 'WooCommerce' ) ) { | |
global $locale, $woocommerce, $woocommerce_germanized; | |
// unload plugin's textdomains | |
unload_textdomain( 'default' ); | |
unload_textdomain( 'woocommerce' ); | |
// set locale to order locale | |
$locale = apply_filters( 'locale', $language ); | |
// (re-)load plugin's textdomain with order locale | |
load_default_textdomain( $language ); | |
$woocommerce->load_plugin_textdomain(); | |
$wp_locale = new \WP_Locale(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I'm in the same situation
If this code solves the problem of the translation of the emails?
let me know what to do, I need woocommerce to work with two languages after checkout