i18n, gestion des dossiers et des devises courantes
Posté : 10 janv. 2007, 14:49
Bonjour,
j'ai un problème de méthodologie relative à i18n.
Je ne sais pas vraiment quelles raisonnement adopter, alors je viens ici
Voilà le problème :
on a un dossier /i18n qui contient les dossiers suivants (par exemple) :
les URLs des pages sont formées de la façon suivante :
Je souhaite trouver le bon dossier en fonction de l'URL (/uk est dans la variable $_GET['lang'], petit rappel), donc en fonction de $_GET['lang'].
Le problème est le suivant :
dans le cas d'un site de commerce, les devises sont importantes, et donc je dois avoir plus besoin de "UK" que de "en" (£ != $ par exemple, et même $US != $NZ etc., trivial).
Mais la langue, entre le néo-zélandais, l'anglais, et l'américain est très semblable. On ne va donc pas copier les fichiers de en-UK, dans en-US, mais juste modifier la devise (lorsqu'elle doit intervenir). Surtout, lorsqu'on va modifier une page qui sera en anglais, on va devoir la changer dans tous les *-UK,-EN,-NZ etc... Ce seraît bête et trop long.
Alors on pourrait définir une constante _DEVISE par exemple, ce qui supprime la modification des fichiers à chaque fois, car _DEVISE prendrait la valeur UK, EN, US etc.
En revanche, ça ne supprime pas le problème de la duplication des fichiers dans chaque dossier (qui ont la même langue : en-*).
Je sais pas si je suis très clair, mais j'ai beau retourner le problème dans tous les sens, je retombe toujours sur un passage chiant, une manipulation à la con (pour être clair
)
Voici le code qui me permet de capturer la langue, il n'est pas terminé, mais ça peut toujours être utile à quelqu'un :
Merci pour votre aide et votre attention.
j'ai un problème de méthodologie relative à i18n.
Je ne sais pas vraiment quelles raisonnement adopter, alors je viens ici
Voilà le problème :
on a un dossier /i18n qui contient les dossiers suivants (par exemple) :
Code : Tout sélectionner
/i18n/
+ en-UK/
+ fr-BE/
+ fr-FR/
+ ...Code : Tout sélectionner
/uk/module/file <=> ?lang=uk&module=module&file=file
ou /be/module/fr <=> ?lang=be&...
ou /fr/module/fr <=> ?lang=frJe souhaite trouver le bon dossier en fonction de l'URL (/uk est dans la variable $_GET['lang'], petit rappel), donc en fonction de $_GET['lang'].
Le problème est le suivant :
dans le cas d'un site de commerce, les devises sont importantes, et donc je dois avoir plus besoin de "UK" que de "en" (£ != $ par exemple, et même $US != $NZ etc., trivial).
Mais la langue, entre le néo-zélandais, l'anglais, et l'américain est très semblable. On ne va donc pas copier les fichiers de en-UK, dans en-US, mais juste modifier la devise (lorsqu'elle doit intervenir). Surtout, lorsqu'on va modifier une page qui sera en anglais, on va devoir la changer dans tous les *-UK,-EN,-NZ etc... Ce seraît bête et trop long.
Alors on pourrait définir une constante _DEVISE par exemple, ce qui supprime la modification des fichiers à chaque fois, car _DEVISE prendrait la valeur UK, EN, US etc.
En revanche, ça ne supprime pas le problème de la duplication des fichiers dans chaque dossier (qui ont la même langue : en-*).
Je sais pas si je suis très clair, mais j'ai beau retourner le problème dans tous les sens, je retombe toujours sur un passage chiant, une manipulation à la con (pour être clair
Voici le code qui me permet de capturer la langue, il n'est pas terminé, mais ça peut toujours être utile à quelqu'un :
<?php
class Truc {
var $langDefault = _LANG_DEFAULT;
function lastDir ( $dir ) {
return array_pop(explode('/', $dir));
}
function defineLang ( ) {
if(isset($_GET['lang']))
$lang = $_GET['lang'];
else
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
preg_match('#([A-Za-z]{2})-([A-Za-z]{2})+#i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $langCouple);
$dir = $lang.'-'.strtoupper($langCouple[2]);
$glob = '{*'.strtolower($lang).',*'.strtoupper($lang).'}';
$find = @array_map(array($this, 'lastDir'), glob('i18n/'.$glob, GLOB_BRACE));
print_r($find);
if(isset($find)) {
if(!in_array($dir, $find))
if(!in_array($lang, $find))
$dir = $this->langDefault;
else
$dir = $lang;
}
else
$dir = $this->langDefault;
echo $dir;
}
}
?>
Merci pour votre aide et votre attention.