Je me lance et délaisse momentanément Spip pour bosser sur le Wiki de
Quilombo!. Ce site ne vous dira rien pour l'instant (mars 2004) mais va peut-être prendre son envol. Le but est d'organiser une rencontre de groupes néerlandophones et francophones (ben ouais, en Belgique) autour du thème de la colonisation (si ça vous intéresse, il y aura au moins un texte en ligne dans les jours qui viennent).... Alors pourquoi un Wiki français me direz-vous? L'anglais serait plus pratique pour tout le monde. Eh bien parce que vous avez bonne mine, et que j'ai hâte de me replonger dans le php (Spip m'a réduite à l'html ;-)
- Donc, je suis intéressée par tout contact avec toute personne intéressée dans la traduction de WikiNi, et d'autant plus s'il y a un travail entamé (j'ai pas encore lu toutes les pages liées à cette question, je sais).
(Bon. Après lecture et mûre (tu parles!) réflexion, je suis passée à
WackoWiki... En fait, "ils" ont fait tout ce que je pensais faire, c'est-à-dire, réunir toutes les chaînes de texte inscrites "en dur" dans les fichiers Wiki dans un fichier de langue qu'il ne reste plus qu'à traduire dans la langue voulue. Les fichiers en français ne sont pas encore disponibles sur leur site alors je me suis attelée à la tâche, en me basant bien sûr sur
WikiNi. Ce qui m'a décidée, c'est que quelqu'un s'est déjà tapé le flamand, langue que je ne pratique pas! Vous pourrez retrouver ces fichiers ici incessament sous peu.)
Bon, après être passée par Wacko, je reviens à
WikiNi... Le problème est qu'ils ont intégré beaucoup de fonctionnalités dont je n'ai pas besoin, le code est bordélique et le passage en lettres cyrilliques pose ensuite des problèmes pour l'affichage des caractères accentués en français.
Donc, j'en reviens à mon idée initiale: remplacement du texte "en dur" par des variables et fichiers de langues comportant la traduction.
Discussions
- Ca pose évidemment des problèmes d'intégration avec Wikini, puisque le remplacement intervient dans TOUS les fichiers! Je ne sais pas bien où proposer cette initiative sur le site, donc je la pose ici, en espérant des réactions!. L'idéal serait de bosser sur les dernières versions des fichiers puis de les intégrer directement au cvs pour éviter de refaire tout le boulot chaque fois qu'il y a un nouveau développement...
- Une autre solution que OlivierMengu?é a commencé à coder, qui me semble plus en accord avec les objectifs de Wikini (performance entre autre) : cf SystemeDeTraductionProprietaire1 , vous pouvez peut-être travailler ensemble à ce projet ? -- DavidDelon
- > Oui, je me manifeste sur sa page et j'étudie la question (je suis pas sûre de bien capter de quoi il s'agit).
Modifications des fichiers de WikiNi en détail:
- création d'un dossier /lang à la racine du site
- création de fichiers de langue dans ce dossier: wakka.fr.php, wakka.nl.php, wakka.en.php, etc.
(Extraits du fichier français):
<?php
$wikiText = array(
"vous_etes" => "Vous êtes ",
"deconnexion" => "Déconnexion",
"DerniersChangements" => "DerniersChangements",
"DerniersCommentaires" => "DerniersCommentaires",
"navigation_links" => "DerniersChangements :: DerniersCommentaires",
"editer_titre" => "Cliquez pour éditer cette page.",
"editer_bouton" => "Éditer cette page",
"modifs_titre" => "Cliquez pour voir les dernières modifications sur cette page.",
"proprietaire" => "Propriétaire",
"vous" => "vous",
"permissions_titre" => "Cliquez pour éditer les permissions de cette page.",
"permissions_bouton" => "Éditer permissions",
"supprimer" => "Supprimer",
"proprietaire_pas" => "Pas de propriétaire",
"appropriation" => "Appropriation",
"references_titre" => "Cliquez pour voir les URLs faisant référence à cette page.",
"references_bouton" => "Références",
);
?>
Note: la variable
navigation_links est fixée ici et plus dans
wakka.config.php. Cela implique une multiplication des pages mais je joue ensuite avec les redirections:
LaatsteVeranderingen? contient
redirect page="DerniersChangements". Comme je traduit aussi l'Action
RecentChanges?, ça ne pose pas de problème. Je n'ai pas choisi l'option proposée dans
WakkaMultilingue, de démultiplier des sous-dossiers par langue dans les actions. Ces fichiers contiendraient de nouveau du texte en dur et lors de la mise à jour d'une action, il faudrait modifier les fichiers pour chaque langue, avec le risque de perdre la cohérence.
- Bonne idée de faire une traduction de WikiNi, mais j'aurais plutôt utilisé des define("PRORIETAIRE_PAS","Pas de propriétaire"); puis ensuite simplement remplacé la chaine en dur par la constante définie. Ensuite une simple inclusion du fichier de langue permet de traduire l'ensemble de l'application sans appel à une méthode. --GarfieldFr
- remplacement du texte "en dur" de tous les fichiers du programme par $this->GetText?("chaine_a_traduire") (voir plus bas pour comprendre GetText?). Par exemple, pour le header:
<?php
$message = $this->GetMessage();
$user = $this->GetUser();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
// ici on indique au browser la langue de la page
// on pourrait aussi ajouter la balise <meta> correspondante
<html <?php echo "lang=\"$lg\""; ?>>
<head>
<title><?php echo $this->GetWakkaName().":".$this->GetPageTag(); ?></title>
<?php if ($this->GetMethod() != 'show')
echo "<meta name=\"robots\" content=\"noindex, nofollow\"/>\n";?>
// on pourrait aussi fixer le jeu de caractère dans une variable
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<meta name="keywords" content="<?php echo $this->GetConfigValue("meta_keywords") ?>" />
<meta name="description" content="<?php echo $this->GetConfigValue("meta_description") ?>" />
<link rel="stylesheet" type="text/css" media="screen" href="wakka.basic.css" />
<style type="text/css" media="all"> @import "wakka.css";</style>
<script type="text/javascript">
function fKeyDown() {
if (event.keyCode == 9) {
event.returnValue= false;
document.selection.createRange().text = String.fromCharCode(9) } }
</script>
</head>
<body <?php echo (!$user || ($user["doubleclickedit"] == 'Y')) && ($this->GetMethod() == "show") ? "ondblclick=\"document.location='".$this->href("edit")."';\" " : "" ?>
<?php echo $message ? "onLoad=\"alert('".$message."');\" " : "" ?> >
<h1 class="wiki_name"><?php echo $this->config["wakka_name"] ?></h1>
// ici ça devient intéressant, repérez les GetText:
<h1 class="page_name">
<a href="<?php echo $this->config["base_url"].$this->GetText("RechercheTexte"); ?>&phrase=<?php echo urlencode($this->GetPageTag()); ?>"><?php echo $this->GetPageTag(); ?></a>
// ici ajout du menu de langue.
//On peut améliorer avec un script de Wacko qui vérifie les fichiers présents dans /lang et génère automatiquement la liste des langues disponibles.
<?php
echo "[<a href=\"".$this->config["base_url"].$this->GetPageTag()."&lang=nl\">NL</a>] ";
echo "[<a href=\"".$this->config["base_url"].$this->GetPageTag()."&lang=fr\">FR</a>] ";
echo "[<a href=\"".$this->config["base_url"].$this->GetPageTag()."&lang=en\">EN</a>] ";
?>
</h1>
// ici on a remplacé $this->config["navigation_links"] par $this->GetText("navigation_links") (voir plus haut)
<div class="header">
<?php echo $this->ComposeLinkToPage($this->config["root_page"]); ?> ::
<?php echo $this->GetText("navigation_links") ? $this->Format($this->GetText("navigation_links"))." :: \n" : "" ?>
<?php echo $this->GetText("vous_etes"); echo $this->Format($this->GetUserName()); if ($user = $this->GetUser()) echo " (<a href=\"".$this->config["base_url"].$this->GetText("ParametresUtilisateur")."&action=logout\">".$this->GetText("deconnexion")."</a>)\n"; ?>
</div>
- modifications de wakka.php. D'abord dans la class Wiki, dans la partie VARIABLES, ajout de deux fonctions SetResource? et GetText? (merci Wacko). Puis, plus bas, après la "création de l'objet wiki", 8 petites lignes de code:
// VARIABLES
function GetPageTag() { return $this->tag; }
function GetPageTime() { return $this->page["time"]; }
function GetMethod() { return $this->method; }
function GetConfigValue($name) { return $this->config[$name]; }
function GetWakkaName() { return $this->GetConfigValue("wakka_name"); }
function GetWakkaVersion() { return $this->VERSION; }
function GetWikiNiVersion() { return WIKINI_VERSION; }
// deux fonctions pour gestion des langues
function SetResource($resource) {$this->resource=$resource;}
function GetText($name) { return $this->resource[$name];}
// ...
// create wiki object
$wiki = new Wiki($wakkaConfig);
// début ajout langue: va chercher les fichiers de langue
// si l'utilisateur a requis une langue via le menu (header), on fixe la variable $lg
if(!$lg=$_REQUEST["lang"]) $lg=$_SESSION["lang"];
// sinon, langue par défaut définie dans wakka.config.php
// on pourrait améliorer avec la détection de la langue du navigateur
if(!$lg) $lg = $wakkaConfig["default_lang"];
// $lg est fixée dans la session
$_SESSION["lang"]=$lg;
// va chercher le fichier de langue adéquat et l'inclut dans la page appelée
if($lg){
$fichier_lang = "lang/wakka.".$lg.".php";
if (file_exists($fichier_lang)) include($fichier_lang);
}
// on définit le tableau $wikiText comme une ressource
// (repris de Wacko, j'ai pas bien pigé si c'est indispensable mais ça marche)
$wiki->SetResource($wikiText);
// fin ajout langue
function compress_output($output) {
return gzencode($output);
}
- modification de wakka.config.php: on ajoute la ligne "default_lang" => "fr",.
Note: pour le moment, j'y ai laissé la variable
navigation_links, parce que c'est utilisé par ailleurs. Je l'ai repérée dans l'
ActionListpages, elle permet d'exclure d'une table des matières les liens existants dans le menu. J'y travaille...
A part ça, je suis aussi
et
et
ici ou encore
et j'ai aussi traîné dans ce coin-
, sans oublier
ici et
ailleurs. Mais on me trouve souvent
ici. Et puis j'aime bien
aussi et enfin je tiens à remercier
. Bon.
Je dis ça c'est pour faire connaissance, pas pour monter dans les moteurs!
Signets
Autres
ActionListPages
PlanDuSite
TableDesMatieres
NavigationEntrePage
Backlinks
Pages ayant un lien vers la page courante :
ActionRedirect
AureLie
GarfieldFr
SystemeDeTraductionProprietaire1
VosSuggestions
WakkaMultilingue