Day.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV/MZ

Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Sorties: Dread Mac Farlane - episode 4 / Sorties: Star Trek: Glorious Wolf - (...) / Sorties: Dread Mac Farlane - episode 3 / News: Plein d'images cools créées par (...) / Sorties: Star Trek: Glorious Wolf - (...) / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

434 connectés actuellement

29191668 visiteurs
depuis l'ouverture

6719 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

RPG Maker Détente

RPG Fusion

Tous nos partenaires

Devenir
partenaire



Messages multilingues

[Edits de script] Système relativement simple pour gérer plusieurs langues (traductions) et avoir un jeu polyglotte.

Script pour RPG Maker XP
Ecrit par Roi of the Suisse
Publié par Roi of the Suisse (lui envoyer un message privé)
Signaler un script cassé

❤ 1

Auteur : Roi of the Suisse
Logiciel : RPG Maker XP
Nombre de scripts : 0

image Attention image
Ceci n'est pas un script habituel, qu'il suffit de coller en bas de votre éditeur de script. Ce script demande de modifier les scripts existants de RPG Maker XP. C'est assez risqué, alors soyez méthodiques, sinon vous risquez de casser votre jeu. De la même façon, il sera un peu plus pénible de retirer le script de votre jeu, si jamais un jour vous n'en voulez plus.

image Attention image
Ce script ne gère pas la traduction des menus, des objets ou des compétences ! Il ne s'applique qu'à un jeu simple, ou avec des menus personnalisés.
Si vous savez le faire, vous pouvez insérer vous-même la traduction de vos menus en modifiant les scripts de votre jeu (Scene_Menu, Scene_Save, Scene_Load, Scene_End).




Il s'agit du script utilisé par les jeux Kujira no Hara et Polaris 03.




Game_Temp

Dans la classe Game_Temp, rajoutez deux accesseurs "message_traduction" et "choix_traduction" en dessous de l'accesseur "message_proc" :

Portion de code : Tout sélectionner

1
2
3
4
5
  attr_accessor :message_text             # message text
  attr_accessor :message_proc             # message callback (Proc)
 
  attr_accessor :message_traduction       # jeu multilingue
  attr_accessor :choix_traduction         # jeu multilingue



Toujours dans la classe Game_Temp, plus bas, dans la méthode initialize, initialisez ces deux variables en dessous de "@message_proc" :

Portion de code : Tout sélectionner

1
2
3
4
    @message_proc = nil
 
    @message_traduction = nil # jeu multilingue
    @choix_traduction = nil # jeu multilingue




Window_Message

Dans la classe Window_Message, dans la méthode terminate_message, réinitialisez ces deux variables en dessous de "@message_proc" :

Portion de code : Tout sélectionner

1
2
3
4
    $game_temp.message_proc = nil
 
    $game_temp.message_traduction = nil # traduction effacee
    $game_temp.choix_traduction = nil # traduction effacee




Interpreter 1

Dans la classe Interpreter 1, à la fin de la méthode setup (juste après @branch.clear), initialisez ces deux variables :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
    # Clear branch data hash
    @branch.clear
 
    # message actuel dans une autre langue
    @message_traduction = nil
    # choix actuel dans une autre langue
    @choix_traduction = nil




Beaucoup plus bas, toujours dans la classe Interpreter 1, dans la méthode setup_choices, remplacez :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  #--------------------------------------------------------------------------
  # * Setup Choices
  #--------------------------------------------------------------------------
  def setup_choices(parameters)
 
    # Set choice item count to choice_max
    $game_temp.choice_max = parameters[0].size
    # Set choice to message_text
    for text in parameters[0]
      $game_temp.message_text += text + "\n"
    end
 
    # Set cancel processing
    $game_temp.choice_cancel_type = parameters[1]


par :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  #--------------------------------------------------------------------------
  # * Setup Choices
  #--------------------------------------------------------------------------
  def setup_choices(parameters)
 
    if $game_temp.choix_traduction != nil
      # une traduction des choix est disponible
      alternatives = $game_temp.choix_traduction
    else
      # pas de traduction, on utilise les choix bruts
      alternatives = parameters[0]
    end
    # choice_max に選択肢の項目数を設定
    $game_temp.choice_max = alternatives.size
    # Set choice to message_text
    for text in alternatives
      $game_temp.message_text += text + "\n"
    end
 
    # Set cancel processing
    $game_temp.choice_cancel_type = parameters[1]




Interpreter 2

Dans la classe Interpreter 2, dans la méthode execute_command, dans le grand "case" où il y a plein de "when/return", insérez une command_108 entre la command_106 et la command_111 :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
...
    when 106  # Wait
      return command_106
 
    when 108 # commentaire (pour y recuperer la traduction des messages)
      return command_108
 
    when 111  # Conditional Branch
      return command_111
...




Interpreter 3

Dans la classe Interpreter 3, dans la méthode command_101, remplacez :

Portion de code : Tout sélectionner

1
2
3
4
5
# Set message text on first line
 
    $game_temp.message_text = @list[@index].parameters[0] + "\n"
 
    line_count = 1


par :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
# Set message text on first line
 
    if $game_temp.message_traduction == nil
      # pas de traduction, on utilise le message tel quel
      $game_temp.message_text = @list[@index].parameters[0] + "\n"
    else
      # une traduction est disponible pour ce message
      $game_temp.message_text = $game_temp.message_traduction
    end
 
    line_count = 1




Code 401, message basique

Un peu plus loin, remplacez :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
# Loop
    loop do
      # If next event command text is on the second line or after
      if @list[@index+1].code == 401
 
        # Add the second line or after to message_text
        $game_temp.message_text += @list[@index+1].parameters[0] + "\n"
 
        line_count += 1


par :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
    # Loop
    loop do
      # If next event command text is on the second line or after
      if @list[@index+1].code == 401
 
        # Add the second line or after to message_text
        if $game_temp.message_traduction == nil 
          # pas de traduction, on utilise la ligne telle quelle
          $game_temp.message_text += @list[@index+1].parameters[0] + "\n"
        end
 
        line_count += 1




Code 102, message à choix

Un peu plus loin, remplacez :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
# Advance index
            @index += 1
            # Choices setup
 
            $game_temp.choice_start = line_count
 
            setup_choices(@list[@index].parameters)


par :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Advance index
            @index += 1
            # Choices setup
 
            # a quelle ligne commence le choix ?
            if $game_temp.message_traduction == nil
              # pas de traduction, donc nombre de lignes RM (commande 401)
              $game_temp.choice_start = line_count
            else
              # traduction, donc nombre de lignes de la traduction
              $game_temp.choice_start = $game_temp.message_traduction.scan(/\n/).size
            end
 
            setup_choices(@list[@index].parameters)




Code 103, message à code numérique

Un peu plus loin, remplacez :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
# If number input window fits on screen
          if line_count < 4
            # Advance index
            @index += 1
            # Number input setup
 
            $game_temp.num_input_start = line_count
 
            $game_temp.num_input_variable_id = @list[@index].parameters[0]
            $game_temp.num_input_digits_max = @list[@index].parameters[1]
          end


par :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# If number input window fits on screen
          if line_count < 4
            # Advance index
            @index += 1
            # Number input setup
 
            # a quelle ligne commence le code numerique ?
            if $game_temp.message_traduction == nil
              # pas de traduction, donc nombre de lignes RM (commande 401)
              $game_temp.num_input_start = line_count
            else
              # traduction, donc nombre de lignes de la traduction
              $game_temp.num_input_start = $game_temp.message_traduction.scan(/\n/).size
            end
 
            $game_temp.num_input_variable_id = @list[@index].parameters[0]
            $game_temp.num_input_digits_max = @list[@index].parameters[1]
          end




Commande 108 : utiliser les commentaires comme traductions

Toujours dans la classe Interpreter 3, entre les méthodes command_106 (Wait) et command_111 (Conditional Branch), ajoutez la méthode suivante :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  #--------------------------------------------------------------------------
  # ● Recuperer la traduction d'un message dans le commentaire au dessus
  #--------------------------------------------------------------------------
  def command_108
    # les messages doivent etre traduits
    if @parameters[0]["(en) "] && $game_variables[121] == 1
      # ce commentaire est une traduction...
      if @parameters[0]["|"]
        # ...pour un CHOIX
        # on decoupe les differentes alternatives
        $game_temp.choix_traduction = @parameters[0][5..-1].split("|")
      else
        # ...pour un MESSAGE
        # premiere ligne
        $game_temp.message_traduction = @parameters[0][5..-1] + "\n"
        # on collecte les autres lignes du commentaire
        ligne = 1
        while @list[@index+ligne].code == 408 do
          $game_temp.message_traduction += @list[@index+ligne].parameters[0] + "\n"
          ligne += 1
        end
      end
    end
    # fin
    return true
  end





Utilisation du script

Au dessus de chaque message de votre jeu, il vous suffira d'ajouter un commentaire qui commence par "(en) " suivi d'un espace et de votre traduction en anglais :

image

image

Au dessus de chaque choix de votre jeu, il vous suffira de faire de même, en séparant les choix traduits par des barres verticales "|" (touche 6 du clavier + ALT GR) :

image

image


Ensuite, il vous faudra modifier la variable 121. Elle vaut 0 par défaut, ce qui correspond au français. Si vous la mettez à 1, les messages seront affichés en anglais.

image




Encore plus de langues !

Souvenez-vous, dans la classe Interpreter 3, nous avons rajouté une méthode command_108 qui traite les commentaires commençant par "(en) " lorsque la variable 121 vaut 1. Il suffit dans cette même méthode command_108 de modifier le "if" du début pour déclarer un autre préfixe et l'associer à une nouvelle valeur de la variable 121. Remplacez :

Portion de code : Tout sélectionner

1
2
3
  def command_108
    # les messages doivent etre traduits
    if @parameters[0]["(en) "] && $game_variables[121] == 1


par :

Portion de code : Tout sélectionner

1
2
3
4
5
  def command_108
    # les messages doivent etre traduits
    if (@parameters[0]["(en) "] && $game_variables[121] == 1) || # ANGLAIS
       (@parameters[0]["(sp) "] && $game_variables[121] == 2) || # ESPAGNOL
       (@parameters[0]["(de) "] && $game_variables[121] == 3) # ALLEMAND

Remarquez le nouveau préfixe "(sp) " et le "$game_variables[121] == 2" associé. Remarquez le nouveau préfixe "(de) " et le "$game_variables[121] == 3" associé. Remarquez que la dernière langue n'a pas de "||". Le contenu du "if" reste le même.


Ainsi il vous suffira d'ajouter un commentaire commençant par "(sp) " au dessus des messages de votre jeu pour disposer d'une troisième langue.

image

image

image

image

Cela se fait en assignant la valeur 2 à la variable 121 du jeu.

Vous pouvez faire de même en rajoutant des "if" pour une valeur 3, une valeur 4 etc. et ainsi avoir un jeu polyglotte.




Gari - posté le 10/05/2020 à 20:17:36 (5899 messages postés) - honor

❤ 0

C'est cool pour aérer un peu les pages d'événements, merci ^^

Je ne sais pas si ça avait été fait, mais est-ce que les contenus de databases peuvent être traduits par script aussi ? (exemple avec ton modèle, créer un script par catégories à traduire : objets/sorts/équipement/monstres/termes qui remplacerait les cases à remplir par la traduction, selon la valeur de la variable langue ?)


Roi of the Suisse - posté le 10/05/2020 à 22:43:52 (29766 messages postés) - honor -

❤ 0

Alerte neige !

Je dispose, pour Kujira no Hara, de scripts permettant de gérer la traduction des objets et des compétences (qui sont les quêtes dans mon jeu). C'est Zeus81 qui m'avait fait ça à l'époque.



L'essentialisme c'est quand ta voiture a un moteur essence. | Es-tu une star ? | Kujira no Hara | Polaris 03 | Planète Glutko

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers