Bonjour à tous,

Je travaille sur un site où l’internationalisation doit être mis en place. 5 langues au total seront disponible. Je cherche le meilleur moyen pour y parvenir. N'ayant de BDD côté serveur actuellement pour le site, je pensais utiliser SQLite pour y stocker les données.

Est-ce possible ? Avez-vous une expérience de ce côté ? Suis-je sur la mauvaise piste ?

Merci pour votre aide.

EDIT : j'aurais environ une trentaine d'entrées.
Modifié par MagicCarpet (26 Aug 2013 - 11:01)
Modérateur
Salut,

MagicCarpet a écrit :


Est-ce possible ? Avez-vous une expérience de ce côté ? Suis-je sur la mauvaise piste ?

EDIT : j'aurais environ une trentaine d'entrées.


En soit, c'est une bonne idée. Le souci est le nombre de user. Plus le nombre de user sera élevé, plus la base de données ramera (surtout si tu fais de l'écriture).... Sqlite bloque la base si elle est en mode insert ou update ou delete).

SQLite est une très bonne base de données. Je pense que le peu de données que tu as devrait faire l'affaire (surtout si tu fais des select simple sans des grosses jointures).

Si tu as un souci de perf (ce que je ne pense pas trop), tu peux te rabattre sur un fichier *.ini et utiliser parse_ini_file()" rel="noopener" >http://php.net/manual/fr/function.parse-ini-file.php]parse_ini_file()[/url]
Modifié par niuxe (26 Aug 2013 - 14:21)
Alors pas d'écriture ni de jointure. C'est juste pour stocker les textes des différentes sections du site dans toutes les langues. Je pense faire une table pour chaque langue.

Via jQuery (que j'utilise déjà pour d'autres choses) fera des appels AJAX pour afficher les informations. Je vais faire un sélecteur pour choisir le pays et donc la combinaison pays+menu sélectionnera le texte et l'affichera sur le site.

Je suis en train de regardé comment ça fonctionne, le plugin pour FireFox est vraiment génial.

J'avais envisagé le JSON aussi mais je pense que là c'est pas bon.

Merci pour toutes ces infos car je connais déjà (un peu) MySQL mais pas du tout SQLite, notamment sur le nombre de connexion et le blocage en cas d'écriture.

Faut que je regarde de plus près cette histoire de fichier ini.
Modifié par MagicCarpet (26 Aug 2013 - 14:46)
A propos du comment, c'est tout à fait possible. IL y a des extensions php pour sqlite2 et sqlite3, soit sous forme de fonctions à l'ancienne (sqlite3_*), soit sous forme de driver pour PDO (recommandé). Souvent, elles sont déjà installées et il n'y a rien à faire avant de commencer à les utiliser.

Ensuite sur le fond, par contre, s'il s'agit de ne stocker q'une série de chaînes assez courtes essentiellement sous forme clé/valeur et que les mises à jour sont plutôt rares, les bases de données sont réputées plutôt lentes à l'exécution. IL existe des moyens connus pour être beaucoup plus efficaces, parmi lesquels :
1 - Un ou plusieurs fichiers INI; sans nul doute le plus simple et le plus efficace, il faut juste faire attention à bien s'organiser pour ne pas se retrouver avec un gigantesque fichier monolythique qui ne serait au final plus si rapide que ça
2 - JSON: ce n'est pas une solution si idote que ça, et ce n'est pas beaucoup plus lent que du fichier INI. Ca peut notamment être pratique selon comment tu prévois d'éditer les données...
3 - XML: on rentre déjà dans du beaucoup plus lourd et donc potentiellement beaucoup plus lent aussi, mais comme pour le 2°, ça peut être un format pratique si tu as des outils de traduction qui exportent dans ce format. Par contre c'est plutôt mal pratique pour éditer à la main je trouve.
4 - Et finalement, il existe une solution dédiée qui s'appelle gettext. JE ne sais pas où ça se situe niveau performances car je n'ai jamais utilisé. JE pense que ça doit rivaliser avec les fichiers INI mais sans les battre. En gros, le principe est qu'on édite des fichiers de traduction avec un outil spécial, puis on les compile en fichiers binaires. Ces fichiers compilés sont propriétaires au format et donc illisibles en-dehors de l'API, mais ce sont des logiciels et des API open source. Les logiciels d'édition sont réputés assez bien fichus et adaptés à des traducteurs qui ne connaissent rien à la programmation. C'est ce dernier point qui est souvent cité comme gros point fort de ce système par rapport à d'autres.
Modifié par QuentinC (26 Aug 2013 - 17:29)
QuentinC, décidemment, merci pour ta réponse.

Bon, pour JSON alors pourquoi pas. Après avoir fais quelques tests avec SQLite (j'aime beaucoup) mais peut-être pas si pratique que ça pour le besoin. JSON justement serais pas mal.

Alors du coup j'aurais une question, admettons que j'ai 5 langues différentes, donc 5 fichiers avec mon JSON. Comment dois-je procéder (si c'est possible) pour charger uniquement le fichier demander en rapport avec mon sélecteur de langue ?

Pour GetText, à priori, je ne connais absolument pas je vais donc allez me balader à la pêche aux infos.
a écrit :
Alors du coup j'aurais une question, admettons que j'ai 5 langues différentes, donc 5 fichiers avec mon JSON. Comment dois-je procéder (si c'est possible) pour charger uniquement le fichier demander en rapport avec mon sélecteur de langue ?


Je suppose que tu stockes la langue actuellement sélectionnée en session ?
Si oui, c'est pas bien compliqué: tu te fixes une convention de nommage pour tes fichiers, par exemple "/lang/{$lang}/{$module}.json" avec $lang la langue et $module un nom de page comme contact, index, etc. ce qui te permet d'avoir un fichier par langue et par module, une solution économe et pratique je pense.

Ensuite pour parser, c'est facile: json_decode. Cette fonction te retourne un tableau indexé par clé, donc après tu n'as plus qu'à faire des choses du genre pour afficher les chaînes récupérées :

echo <<<END
<h1>{$strings['titre_du_site']}</h1>
<p>{$strings['bonjour']}</p>
<p>{$strings['description_du_site']}</p>
END;
Notons que la même chose est faisable avec des fichiers php ^^

Structure du fichier php de langue (version fr) : ( /fr/formcontact.php)

$languePage=array(
  'titre'=>"Formulaire de contact",
  'email'=>"Email",
  'sujet'=>"Sujet",
  'commentaire' => "Commentaire");


Le même en anglais: ( /en/formcontact.php)
$languePage=array(
  'titre'=>"Contact",
  'email'=>"Email",
  'sujet'=>"Subject",
  'commentaire' => "Commentary");


(anglais totalement approximatif ^^)


Et le fichier contact.php

<?php session_start;
require_once ($_SESSION['langue']."/formcontact.php);


Et dans les balises html, quand tu dois afficher ton texte (par exemple le title de la page
<title><?=$languePage['titre'];?></title>
Bonjour à tous,

Alors je me suis renseigné sur gettext et je dois dire que ça ne m'embale pas et ce, pour plusieurs raisons :
- La page officielle de l'outil n'est plus mis à jour depuis 2010.
- Il y'a pas mal de manipulation à faire (notamment avec le logiciel que l'on utilise pour créer et gérer le fichier que ce programme utilise)
- Je pense que c'est très bien pour des mots courts et de gros sites, les deux exactes inverse de mon projet.

Bref, je ne remet pas en question les performances ou autre, juste que ce n'est pas adapté.

Pour JSON, un des problèmes est la relecture qui n'est pas terrible du fait du formatage du fichier. Un oeil non expert doit y travailler dessus, donc pour cette raison, ce n'est pas non plus idéal.

Sinon merci Lothindil pour ces détails, ils me seront utiles.

Du coup je vais utiliser SQLite (ça me permettra aussi d'utiliser un peu SQL et de découvrir cette BDD que je ne connais pas) et faire des appels AJAX et là, j'ai besoin de votre aide Smiley smile

J'ai ce code :
$.ajax({
		url: '/php/fichier.php',
		type: 'POST',
		success: function() {
			$('#content').html('tata');
		},
		error: function() {
			
		}
	});


C'est juste pour voir si cela fonctionne... J'ai une erreur 404, donc il ne trouve pas ce fichier alors que plus bas j'ai la même chose (sur un autre fichier PHP) et qui fonctionne très bien.

A la racine de mon site j'ai un dossier JS avec un fichier qui contient ce code et un dossier PHP ou contient mon fichier PHP que j'essaye d'atteindre. Quelqu'un pourrait il m'indiquer pourquoi cela ne fonctionne pas ? Merci.

EDIT : le code plus bas qui appel une autre page en AJAX pose problème. Sur un serveur, celui de production, il fonctionne. Mais j'ai aussi un Raspberry où nginx est installé et là je viens de tester mais aucun code AJAX (celui que je montre ici et celui qui es censé fonctionner) ne répondent. Les deux me renvoient des erreurs 404.
Modifié par MagicCarpet (28 Aug 2013 - 16:24)
MagicCarpet a écrit :

- La page officielle de l'outil n'est plus mis à jour depuis 2010.


Updated: $Date: 2013/08/27 23:32:09 $

Soit hier. En plus c'est un projet maintenu par la Free Software Foundation donc tu peux y aller les yeux fermé.

MagicCarpet a écrit :

- Il y'a pas mal de manipulation à faire (notamment avec le logiciel que l'on utilise pour créer et gérer le fichier que ce programme utilise)


C'est juste l'inverse, le programme construit automatiquement le catalogue en scannant tes sources. Quasiment tous est automatisé.

MagicCarpet a écrit :

- Je pense que c'est très bien pour des mots courts et de gros sites, les deux exactes inverse de mon projet.


Bon la c'est juste n'importe quoi. Je pense que t'es pas tombé sur le bon site ou que t'as pas lu la doc du tout.
Modifié par jb_gfx (28 Aug 2013 - 16:54)
C'est quoi l'adresse du site ?
Ou alors j'ai rien compris Smiley smile
Je ne suis pas rentré dans le détail avec la doc mais j'ai vu une vidéo (un peu vieille) sur Graphikart et regardé quelques tutos.