|
Salut à tous,
Alors que le développement de Seelies (un jeu par navigateur) est en cours, j'ai, en développant le système de localisation, eu une idée sur laquelle je voudrais avoir votre avis. Je rappelle très rapidement le contexte : dans Seelies, le joueur en tant qu'individu est au second plan : tout se fait par des groupements de joueurs en petites communautés appelées Vols (comme un vol d'hirondelle, mais avec des Seelies). Chaque joueur joue une Seelie dont le signe influe sur sa façon de servir son Vol. [En savoir plus...] (attention, on déménage beaucoup au niveau des serveurs ![]() Le jeu sera disponible dans plusieurs langues (le système fait qu'il est simple d'ajouter des traductions aux éléments, qu'ils soient statiques (interface du jeu) ou dynamiques (noms des objets en base de données). La gestion de la communauté s'est donc posée très tôt. J'ai envisagé la possibilité de mettre les joueurs ensembles sans distinction de langue ainsi que la possibilité de les dissocier complètement quand m'est venue une autre approche. Cette approche différente placerait en fait des zones de départ pour chaque langue supportée par le jeu, en restant donc dans un univers commun à tous les joueurs. Chaque communauté évoluerait donc indépendamment des autres. Cela pourrait se faire par l'utilisation de continents. L'idée est de poser des barrières entre les communautés, et de permettre aux joueurs de les briser en s'y mettant de chaque côté. On pourrait par exemple imaginer deux continents (l'un accueillant les francophones et l'autre des anglophones) séparés par une immense chaîne de montagnes, infranchissable en l'état. Un chantier pourrait alors être entrepris de part et d'autre de ces montagnes pour faire un pas l'un vers l'autre. Cela se ferait au moyen d'un travail colossal dans les deux camps, un genre d'effort commun où il faudrait bien plus qu'un ou deux Vols, mais des dizaines de part et d'autre. Chaque Vols devrait alors déployer les bêtes qu'il dresse pour creuser des galeries, fournir des matériaux pour les rendre praticables, les maintenir, etc. Le tout nécessitant un investissement permanent, engendrant de lourds coûts d'entretien qui pourraient être compensés (bien que la démarche de contact des deux communautés doit avant tout être volontaire) en introduisant des ressources dans un continent et pas dans l'autre. Voilà pour les grandes lignes, j'attends vos réactions avec impatience. ![]() Sephi-Chan |
![]() |
|
Aller à la page... |
Localisation - Plusieurs langues dans un univers ?
Suivre Répondre |
|
Partager | Rechercher |
|
Les affrontements de Seelies se font à l'échelle des Vols, pas des régions/continents.
En ce qui concerne, les traductions, j'utilise un fichier JSON par langue contenant les traductions statiques. Ils sont placés dans un dossier localisation/ lui même placé à la racine. J'ai ensuite une classe Localisation.class.php qui convertit cet objet JSON en un tableau PHP. Celui-ci sera, à terme, placé dans la RAM du serveur grâce à APC ou Memcache (je choisirais après avoir testé les deux). L'autre solution que j'envisage (si je n'utilise pas l'une des deux précédemment citée) est de mettre en cache dans des fichiers HTML les portions de pages directement utilisables. Ma vue fait ensuite appel à la méthode Localisation::localize($label), qui renvoie le mot $label dans la langue demandée. Si tu veux, tu peux voir les sources du projet ici sur [Wiki Seelies] Sources. J'ai mis à jour les fichiers concernant la localisation. En base de données, pour chaque table demandant des traductions, je crées une table portant le même nom avec le suffixe _localisation qui contient l'identifiant unique du champ à traduire et les différents termes à traduire, ainsi qu'une locale. Par exemple, on peut imaginer une table objets possédant des champs id et nom avec un contenu genre : objets Code:
id : nom 1 : Couteau 2 : Bouclier La table objets_localisation contiendrai alors les colonnes id, nom et locale. Code:
objets_localisation id : nom : locale 1 : Knife : en 1 : Messer : de Code:
$query = sprintf( "SELECT O.id, IF(O2.nom IS NULL, O.nom, O2.nom) AS nom FROM objets O LEFT JOIN objets_localisation O2 ON O.id = objets_localisation.id AND O2.langue = '%s';", $_SESSION['localisation'] ) ![]() Sephi-Chan |
![]() |
|
Suivre Répondre |
Connectés sur ce fil1 connecté (0 membre et 1 invité)
Afficher la liste détaillée des connectés
|