Page 1 sur 1

i18n, gestion des dossiers et des devises courantes

Posté : 10 janv. 2007, 14:49
par Hywan
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) :

Code : Tout sélectionner

/i18n/ + en-UK/ + fr-BE/ + fr-FR/ + ...
les URLs des pages sont formées de la façon suivante :

Code : Tout sélectionner

/uk/module/file <=> ?lang=uk&module=module&file=file ou /be/module/fr <=> ?lang=be&... ou /fr/module/fr <=> ?lang=fr

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 :P)

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.