JeuWeb - Crée ton jeu par navigateur
[Résolu] Entité nommable et internationalisation - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu] Entité nommable et internationalisation (/showthread.php?tid=3477)



[Résolu] Entité nommable et internationalisation - Zamentur - 23-12-2008

Bon j'avais beaucoup de mal à trouver une idée de titre!

Donc en fait comme certains le savent je travail actuellement sur un module d'internationalisation permettant de gérer aussi les accords de phrases.

exemple a écrit :Soit la phrase:
"Vous attaquez avec %d sabre%s laser%s"

Si %d est >1 alors les %s seront remplacé par un s
Vous attaquez avec 2 sabres lasers

Bref çà c'est le concept de base, pour que vous sachiez de quoi çà parle et que çà ne vous paraisse pas trop abstrait!

Maintenant ce que je souhaite c'est que sabre laser puisse aussi être le nom d'un autre objet. Sachant que je ne connais pas le nom des objets puisque ce sont les joueurs qui les créaient!

Je veux donc un trucs du style:

exemple a écrit :Soit la phrase:
"Vous attaquez avec %d %s"

Si %d est >1 alors la valeur %s sera accordé au pluriel.
Vous attaquez avec 5 poêle à frire laser

Bon le seul soucis c'est que selon les langue les propriété des noms d'objet ne sont pas identique (le genre est différent selon les langues par exemple)

J'ai prévu de créer une table avec le nom de mes objets
nom_singulier varchar
nom_pluriel varchar
genre enum

Seulement voilà je me retrouve face à un problème de conception de bdd!
Dois je crée une table par langue sachant que selon les langue les infos à enregistrer ne seront pas identique
Ou alors dois je le faire dans une seule table avec plus de colonne donc et un identifiant de langue?

3 ème solution dois je prévoir la possibilité de switcher d'un modèle à l'autre?

Je ne sais pas trop à combien de langue le système devra aller, et il est vrai que çà m'embêterai de créer plus de 10 tables pour çà!

Bref, voilà sachant que cette table permettra la formation d'une classe permettant de nommer les choses et d'être utilisé comme paramètres de mes jolies phrases à trou de façon complètement transparente pour le code environnant.


RE: Entité nommable et internationalisation - Melimelo - 24-12-2008

Moi personnellement en cas d'internationalisation d'une application, je préfère faire varier le nom de la Base avec un préfixe par exemple

fr_base

en_base

Et donc toute l'application peut switcher d'une langue a une autre. Mais l'interaction entre les différentes langues est vraiment réduites vu que je change de Base.

Dans ton cas une table doit certainement convenir, mais la maintenance du contenu si elle est faite manuelement peut-s'avérer plus fastidieuse.

Cordialement Melimelo


RE: Entité nommable et internationalisation - Zamentur - 24-12-2008

La maintenance du contenue sera géré par un groupe de membres du jeu. En gros l'idée est d'utiliser les clic workers afin de garantir la qualité linguistique du jeu.

Le problème d'une seul table c'est que je risque de devoir mettre plusieurs colonne du au différentes propriété dans chaque langue.

Dois je alors mélangé le genre allemand et genre français sur la meme colonne. Sachant qu'en français c'est masculin féminin et en allemand il ya le neutre en plus?


Concernant de multiple base, ce n'est pas envisageable, parce que mon idée est de ne pas séparer selon la langue. Le jeu devant au maximum favoriser l'échange culturel.


RE: Entité nommable et internationalisation - Sephi-Chan - 24-12-2008

Dans ce cas, je te proposes de doubler chaque table contenant des informations à traduire.

Par exemple, une table objets, et une table objets_i18n, avec des requêtes comme :

SELECT O.id,
IF(O2.nom IS NULL, O.nom, O2.nom) AS nom
FROM objets O
LEFT JOIN objets_i18n O2 ON O2.id = O.id AND O2.langue = 'en';

Ainsi, c'est simple : si la traduction existe pour la langue demandée, elle est utilisée, sinon, la langue par défaut (utilisée dans la table objets) est utilisée.

Ensuite, sur ce modèle de requêtes, tu peux faire une seconde condition pour savoir si tu récupères nom_singulier, nom_pluriel ou nom_neutre.


Sephi-Chan


RE: Entité nommable et internationalisation - Melimelo - 24-12-2008

Ben ta colone peut prendre n'importe quel valeur donc pk pas ^^

même si on inventait encore des genres Bi-masculino-feministe, ben tu pourais le prendre en compte vu qu'un mot ne peut avoir qu'un et un seul genre


RE: Entité nommable et internationalisation - Zamentur - 24-12-2008

Melimelo je suis d'accord!
En fait le soucis est aussi un soucis de conception puisque je ne sais pas ce qui caractérise un nom dans les autres langues. Je suis à peu prés sur que çà marche pour les langues latines etc...
Mais pour le reste?

(Même si je projette pas de traduire le jeu en tamoul, en fait c'est pour le défi)

Je me dis qu'il n'y a peut être pas que le genre qui compte...

@ Sephi:
Pour ce qui es de ta solution, effectivement c'est pas idiot de partir sur une langue par défaut.
Mais en fait ma table de nom est complètement indépendante, des autres il y a un id qui permet aux autres tables d'y faire référence et c'est tout.
L'id étant commun pour chaque phrase traduite. (cheval et horse auront le même id)
Comme tu auras pus t'en rendre çà ne résout pas le problème lié aux exceptions des différentes langues.

NB: dans ton interprétation tu considères que chaque table a ses colonnes de traduction. Pensez vous que je risque de perdre beaucoup de performances si je fais comme j'ai dis au dessus(1 table qui centralise tous les noms d'objets pour toutes les tables)

#Mes conclusions actuels
Pour l'instant je suis sur la solution d'une unique table fédératrice ou je mettrais tous les noms dynamiques de toutes les langues avec une colonnes langues comme le suggère Melimelo. Mais je suis pas encore fixé.
Le schéma avec plusieurs tables fédératrices à raison d'une par langue, me semble pas mal, MAIS j'ai peur que ce système passé une quinzaine de langue fera ralentir les requêtes à cause du besoin de trouver la table avant de commencer la recherche;évidement autant de langue ne concerne pas le jeu (enfin je pense), mais peut être d'autres projets futurs.

D'un autre côté on peut raisonnablement se dire que mettre un insert/nom/langue risque aussi de rendre le parcours de cette table assez long? Tout dépend du nombre d'objet qu'inventeront mes joueurs... Et çà je peux pas trop le chiffrer pour l'instant surtout que çà dépend des joueurs etc...

D'où ma grande hésitation avec le système gérant plusieurs langues

Edit:En écrivant ce texte je penche finalement pour la solution d'1 table fédératrice pour chaque langue (et non d'1 table fédératrice commune à toutes les langues).

Je pense que ce sujet sera bientôt résolu et que je resterai sur ce choix, cependant si d'autre ont un avis différent quand à mon raisonnement, ou alors une solution tout autre je suis preneur!


Merci à tous!


RE: [Résolu] Entité nommable et internationalisation - wild-D - 27-12-2008

mon avis perso rien qu'à moi; ceci sans aucune considération pour les performance :p

une table par langue, avec une structure qui peut lui être propre; afin de prendre en compte les spécificité de déclinaison propre à cette langue.
Car chaque langue à ses propres règles d'accord/déclinaison. masculin/féminin(/neutre), Singulier/pluriel(/??), sans compter d'autre type de déclinaison, type en allemand ([Nominatif: Der Mann ; Die Frau ; Das Kind] [Accusatif: Den Mann ; Die Frau ; Das Kind] [Datif : Dem Mann ; Der Frau ; Dem Kind] [Génitif : Des Mann(e)s ; Der Frau ; Des Kind(e)s]).

enfin si le dico doit être important; j'aurais surtout tendance à suivre la logique inverse, en partant carrément des régles de grammaire/déclinaison, etc... et les listes de mots qui bien sûr font exception (parce que c'est bien connu une règle sans exception, c'est pas une règle Big Grin) avec inflector + dico d'exception.


RE: [Résolu] Entité nommable et internationalisation - Zamentur - 28-12-2008

On est sur la même longueur d'onde, c'est cool!
Merci à tous pour vos réactions!