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...