Peut être une incompréhension de ma part mais ob_start n'est pas fait pour les expressions regulières mais pour retenir le flux d'une page.
Ainsi :
function callback($buffer) {
$lang_array = array(
"{path}" => $_SESSION['lang'],
"{top_menu_aboutus}" => "About Us",
"{top_menu_register}" => "Register",
"{top_menu_user_disconnect}" => "Disconnect",
);
$rval = str_replace(array_keys($lang_array),array_values($lang_array),$buffer); //Ou les expressions régulières
return $rval;
}
ob_start("callback");
//Html
ob_end_flush();
Si ça intéresse quelqu'un, je veux bien faire un tutoriel à ce sujet.