Gérer plusieurs langues dans votre jeu

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
archibal11
Messages : 18
Inscription : 08 Août 2015 15:33

Re: Gérer plusieurs langues dans votre jeu

Message par archibal11 » 11 Nov 2015 13:23

Bon j'ai du mal a trouver comment dans un menu en sélectionnant la langue souhaité appliquer ce changement de langue!!

Pouvez vous m'indiquer la voie a prendre?
merci.

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: Gérer plusieurs langues dans votre jeu

Message par Max » 11 Nov 2015 14:17

Bonjour,

L'exemple sur lequel tu te base (cf les codes des messages précédent) tient compte du langage définis, comme tu l'as vu, au niveau du système d'exploitation ('string lang = Application.systemLanguage.ToString();').
Si dans ton cas tu souhaite en passer par une sélection manuelle, tu met sur pied un menu (au démarrage de ton jeu par exemple), et en fonction de la langue sélectionnée, alors tu de ton jeu, alors schématiquement tu fera un truc du genre: string lang = menuSelectlangage;
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

archibal11
Messages : 18
Inscription : 08 Août 2015 15:33

Re: Gérer plusieurs langues dans votre jeu

Message par archibal11 » 12 Nov 2015 21:36

j'ai compris , mais je cherche a me compliquer la vie ;)
ok donc au démarrage ca va chercher dans le systeme ma langue utilisé, mais par la suite comment peut t'on manuellement modifier la langue?

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: Gérer plusieurs langues dans votre jeu

Message par Max » 13 Nov 2015 10:03

archibal11 a écrit : mais par la suite comment peut t'on manuellement modifier la langue?
Tu veux dire durant le jeu ? ou laisser le choix au player dans le menu start ?
Dans tous les cas, il suffit de modifier légèrement le fichier Lang, pour que l'entré ne se fasse pas sur le 'Application.systemLanguage' mais sur une entrée d'un menu par exemple.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

archibal11
Messages : 18
Inscription : 08 Août 2015 15:33

Re: Gérer plusieurs langues dans votre jeu

Message par archibal11 » 13 Nov 2015 18:50

oui durant le jeu , aller dans un menu paramètre et changer la langue.
Dans tous les cas, il suffit de modifier légèrement le fichier Lang, pour que l'entré ne se fasse pas sur le 'Application.systemLanguage' mais sur une entrée d'un menu par exemple.
cela ne me dérange pas qu'au 1er lancement que cela se fasse sur le 'Application.systemLanguage' mais aprés je ne vois pas comment modifier le fichier Lang pour pouvoir rechanger la langue manuellement pendant le jeu.

Dans mon cas il faudrait rappeler la fonction awake du fichier Lang ( a partir d'une autre scène )en lui envoyant comme info la langue souhaité!

archibal11
Messages : 18
Inscription : 08 Août 2015 15:33

Re: Gérer plusieurs langues dans votre jeu

Message par archibal11 » 13 Nov 2015 23:13

dans mon fichier Lang j'ai rajouté une copie de Void Awake() tel que :

Code : Tout sélectionner

public void essai(string llangue)
	{
		string lang = llangue;
		//menulanguage = GameObject.Find ("Main Camera").GetComponent<menulanguage>();
		
		string jsonString = string.Empty;
		
		if (lang == "French")
			print ("french");
		jsonString = Resources.Load<TextAsset>("lang.fr").text;
		if (lang == "English")
			jsonString = Resources.Load<TextAsset>("lang.en").text;
		
		JSONNode json = JSON.Parse(jsonString);
		int size = json.Count;
		
		_gameTexts = new Dictionary<string, string>(size);
		
		JSONArray array;
		for (int i = 0; i < size; i++)
		{
			array = json[i].AsArray;
			_gameTexts.Add(array[0].Value, array[1].Value);
		}
	}

et dans ma scene du menulangage

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
//using SimpleJSON;

public class menulanguage : MonoBehaviour

{

	Lang mylang;
	int submitPressed = 0;
	public  string lang ;
	private Rect _boxRect;
	private Rect _areaRect;
	
	void Start()
	{  	 
		
		_boxRect = new Rect(
			Screen.width / 2 - 125,
			Screen.height / 2 - 75, 
			250, 
			150);
		
		_areaRect = new Rect(
			_boxRect.x + 5, 
			_boxRect.y + 40, 
			_boxRect.width - 10, 
			_boxRect.height - 10);
	}

	void OnGUI() 
	{
				GUI.Box (_boxRect, Lang.Get ("game.language"));
				GUILayout.BeginArea (_areaRect);
				GUILayout.BeginVertical ();
				if (GUILayout.Button (Lang.Get ("game.LangFR"))) {
						submitPressed = 1;
				}
				GUILayout.Space (10);
				if (GUILayout.Button (Lang.Get ("game.LangEN"))) {
						submitPressed = 2;
				}
				GUILayout.Space (10);
				if (GUILayout.Button (Lang.Get ("game.backsetting"))) {
						submitPressed = 3;
				}
				GUILayout.Space (10);
				GUILayout.EndHorizontal ();
				GUILayout.EndArea ();
		
				switch (submitPressed) {
				case 1:
						lang = "French";
			
			mylang = GameObject.Find("Cube").GetComponent<Lang>();

			mylang.essai(lang);
			
						//Application.LoadLevel ("mainsettings");
						break;
				case 2:
						lang = "English";
			 



						Application.LoadLevel ("mainsettings");
						break;
				case 3:
						Application.LoadLevel ("mainsettings");
						break;	
	
				}
		}
}
la ligne mylang = GameObject.Find("Cube").GetComponent<Lang>(); me donne l'erreur :
NullReferenceException: Object reference not set to an instance of an object

Dans la scene ou j'affiche le menulangage j'ai rajouté l'objet Cube qui recoit le script Lang
au lancement j'ai le message
[Singleton] Using instance already created: Cube
UnityEngine.Debug:Log(Object)

suivi de
NullReferenceException: Object reference not set to an instance of an object

ou se trouve le ou les erreurs?

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: Gérer plusieurs langues dans votre jeu

Message par Max » 14 Nov 2015 11:55

archibal11 a écrit : la ligne mylang = GameObject.Find("Cube").GetComponent<Lang>(); me donne l'erreur :
NullReferenceException: Object reference not set to an instance of an object
Attention, Lang est un singleton, donc il ne doit pas faire l'objet d'une instanciation.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

archibal11
Messages : 18
Inscription : 08 Août 2015 15:33

Re: Gérer plusieurs langues dans votre jeu

Message par archibal11 » 14 Nov 2015 12:29

excuse moi je suis un novice,; veux tu dires que Lang ne doit pas etre collé a un objet?

comment puis je m'y prendre pour récupérer la fonction essai du script Lang?

Avatar de l’utilisateur
Max
Messages : 8772
Inscription : 30 Juil 2011 13:57
Contact :

Re: Gérer plusieurs langues dans votre jeu

Message par Max » 14 Nov 2015 16:58

Dans ton cas tu n'as pas à attacher Lang à un GameObject.
Tu sembles mélanger en parallèle de Lang, une tentative d'instance perso, c'est là aussi que cela coince. Pourquoi ne pas modifier le fichier Lang lui même, qui est bien là pour gérer les différents choix de langues (genre ajouter une fonction ChangeLanguage(string language) ).
Après, il faut un petit peu regarder du coté de l'apprentissage du C#, car au point ou tu en est, tu va vite décrocher, et tu auras bien du mal à avancer (sans que quelqu'un le fasse pour toi du moins) ;)
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

archibal11
Messages : 18
Inscription : 08 Août 2015 15:33

Re: Gérer plusieurs langues dans votre jeu

Message par archibal11 » 14 Nov 2015 17:22

oui c'est vrais je vais trop vite,je recupére des bout de code et j'essaye de comprendre comment ca marche afin de pouvoir par la suite les réutiliser a ma sauce..
Un minimum est quand meme nécessaire, je vais donc revoir plus approfondissement les bases.

Merci tout de meme de tes réponses.

Répondre

Revenir vers « (C#) CSharp »