This may seem a bit hackish, but you could have multiple trees but keeping one main tree with all the fields of all languages. The other trees would be there only for constructing the urls. There doesn't have to be any field on their pages. The template for each of those pages can call the fields from the corresponding page from the main tree.
So, for having the kind of urls you want (domain.com/en/products/productA), on your template you could do this (not tested):
(--Assign this template to all the pages in the language trees--)
// Here I will assume that English is the default language, and the main branch of the tree
$de = $pages->get("/de/");
$pt = $pages->get("/pt/");
$parents = $page->parents; // An array with all the ascendants of current page
if ($parents->has($de) || $page->name == "de") { // If current page is under /de/
$lang = "de";
}
if ($parents->has($pt) || $page->name == "pt") { // If current page is under /pt/
$lang = "pt";
}
if (isset($lang)) { // If not the default language -> change from if($lang) to if (isset($lang)) to prevent errors
// Change to the correct language
$user->language = $languages->get($lang);
// Now we have to convert the $page object in the correspondent page from the main tree
// I'm using a pagefield now (just include a pagefield on the template and choose the corresponding page from the main tree)
$page = $pages->get("$page->pagefield");
}
include("./{$page->template}.php"); // includes the original template file
On the head, change the navigation to: (here i used the default theme as example)
$homepage = $pages->get("/");
if (isset($lang)) $homepage = $pages->get("/$lang/");
Maybe this is confusing, and maybe not easy to deal with links later, i don't know... I will sleep and see if it still makes any sense in the morning
edit: I did some changes in the code, The most important are: using a select page field, including the original template, and fixing the navigation