I spent some time on this but it's too much of a rabbit hole for me.
I defined multiple taxes in the admin, then used the db id as part of the constant that would provide the language title.
includes/modules/order_total/ot_tax.php
define('MODULE_ORDER_TOTAL_TAX_TITLE_1', 'EN Tax 1');
define('MODULE_ORDER_TOTAL_TAX_TITLE_2', 'EN Tax 2');
define('MODULE_ORDER_TOTAL_TAX_TITLE_3', 'EN Tax 3');
Then in
class ot_tax {
var $title, $output;
function __construct() {
$this->code = 'ot_tax';
$this->title = "MODULE_ORDER_TOTAL_TAX_TITLE_";//stub of tax title constants
$this->description = MODULE_ORDER_TOTAL_TAX_DESCRIPTION;
$this->sort_order = defined('MODULE_ORDER_TOTAL_TAX_SORT_ORDER') ? MODULE_ORDER_TOTAL_TAX_SORT_ORDER : null;
if (null === $this->sort_order) return false;
$this->output = array();
}
function process() {
global $order, $currencies;
$taxTitles = '';//concatenated tax titles shown for non-split display
$taxValue = 0;
if (STORE_TAX_DISPLAY_STATUS == 1)
{
$taxAddress = zen_get_tax_locations();
$result = zen_get_all_tax_descriptions($taxAddress['country_id'], $taxAddress['zone_id']);
if (count($result) > 0)
{
foreach ($result as $description)
{
if (!isset($order->info['tax_groups'][$description]))
{
$order->info['tax_groups'][$description] = 0;
}
}
}
}
if (count($order->info['tax_groups']) > 1 && isset($order->info['tax_groups'][0])) unset($order->info['tax_groups'][0]);
$index = 1;
foreach($order->info['tax_groups'] as $key => $value) {
if (SHOW_SPLIT_TAX_CHECKOUT == 'true')
{
if ($value > 0 or ($value == 0 && STORE_TAX_DISPLAY_STATUS == 1 )) {
$this->output[] = array('title' => ((is_numeric($key) && $key == 0) ? TEXT_UNKNOWN_TAX_RATE : constant($this->title . $index) . ':'),
'text' => $currencies->format($value, true, $order->info['currency'], $order->info['currency_value']),
'value' => $value);
}
} else
{
if ($value > 0 || ($value == 0 && STORE_TAX_DISPLAY_STATUS == 1))
{
$taxTitles .= ((is_numeric($key) && $key == 0) ? TEXT_UNKNOWN_TAX_RATE : constant($this->title . $index)) . ' + ';
$taxValue += $value;
}
}
$index++;
}
if (SHOW_SPLIT_TAX_CHECKOUT != 'true' && ($taxValue > 0 or STORE_TAX_DISPLAY_STATUS == 1))
{
$this->output[] = array(
'title' => substr($taxTitles, 0 , strlen($taxTitles)-3) . ':' ,//remove final '+' from concatenated titles
'text' => $currencies->format($taxValue, true, $order->info['currency'], $order->info['currency_value']) ,
'value' => $taxValue);
}
}
Which gives these, depending if tax is split or not


So this would require either a column in the admin taxes table to show users the constant name they need to define for each tax/or the constant name in the info box.
Then I looked at this constant
MODULE_ORDER_TOTAL_TAX_DESCRIPTION
and saw it gets used with
function zen_get_all_tax_descriptions
which collects the non-language-dependent descriptions defined in the admin...and I thought "nah".
I personally don't need this functionality so cannot justify the time to code this completely.
Just documenting it here for someone who DOES need it enough to work it through properly...
Steve
github.com/torvista: BackupMySQL, Structured Data, Multiple Copy-Move-Delete, Google reCaptcha, Image Checker, Spanish Language Pack and more...