Logo Khaganat

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
en:rc_localisation_traduction [2016/11/17 21:34] Domperssen:rc_localisation_traduction [2021/12/03 18:19] (current) – external edit 127.0.0.1
Line 65: Line 65:
 identifier [Other text value]</code> identifier [Other text value]</code>
  
-If you want to specify new rows or tabs in a string-value, you must use the C '' \ t '' escape sequence for tabs and '' \ n '' for new lines. To write '' \ '' in a string-value, double the backslash: '' \\ ''. To write ''] '' in the string, precede it with a backslash : ''\]''.+If you want to specify new rows or tabs in a string-value, you must use the C ''\t'' escape sequence for tabs and ''\n'' for new lines. To write ''\'' in a string-value, double the backslash: ''\\''. To write '']'' in the string, precede it with a backslash : ''\]''.
  
 <code>identifier1 [tabulation : \This text is tabulated] <code>identifier1 [tabulation : \This text is tabulated]
-identifier2 [New line \ nText on a new line] +identifier2 [New line \nText on a new line] 
-identifier3 [Backslash : \\] +identifier3 [Backslash: \\] 
-identifier4 [A closing hook : \] ]</code>+identifier4 [A closing hook: \] ]</code>
  
 For easier use and maintaining, you can split up the original file into a "series of smaller files". For easier use and maintaining, you can split up the original file into a "series of smaller files".
-This is done by using a pre-processor command in the C-programing language: "#include.+This is done by using a pre-processor command in the C-programing language: "#include".
  
   #include "path/filename.txt"   #include "path/filename.txt"
  
-You can have any number of "include"-commands, you can even have "include"-commands in include files.+You can have any number of "include-commands", you can even have "include"-commands in include files.
 The "path" can be either "absolute" or "relative" to the location of the "master file". The "path" can be either "absolute" or "relative" to the location of the "master file".
  
Line 152: Line 152:
 propertyName : identifier propertyName : identifier
  
-operator : ‘=’+operator: ‘=’
 | ‘!=’ | ‘!=’
 | ‘<’ | ‘<’
Line 159: Line 159:
 | ‘<=’ | ‘<=’
  
-reference : identifier+reference: identifier
  
-textValue : ‘[‘ .* ‘]’</code>+textValue: ‘[‘ .* ‘]’</code>
  
 As in format 1, you can insert "C style" comments in the text, identifier with enclosure marks, and use the include command. As in format 1, you can insert "C style" comments in the text, identifier with enclosure marks, and use the include command.
Line 182: Line 182:
 Example: You have a string with the following replacements(in English): Example: You have a string with the following replacements(in English):
  
-'' Report me ** $ item.da $ $ item.name $ ** " ''+''"Report me ** $ item.da $ $ item.name $ ** "''
  
 And the file will contain the following names: And the file will contain the following names:
Line 192: Line 192:
 If the item is 'hammer', there is no problem. The replacement will give the following result: If the item is 'hammer', there is no problem. The replacement will give the following result:
  
-'' "Report me ** hammer **" ''+''"Report me ** hammer **"''
  
 But for 'l’ échelle', there is an extra space in the result: But for 'l’ échelle', there is an extra space in the result:
  
-'' "Report me ** l’ échelle **" ''+''"Report me ** l’ échelle **"''
  
 To remove this extra space, you can add a 'delete' marker in the article definition, like this: To remove this extra space, you can add a 'delete' marker in the article definition, like this:
Line 220: Line 220:
  
 The server-side translation is a bit more complicated. The server-side translation is a bit more complicated.
-We will see how the server-side translations is done in four steps (We will start with the simplest to the most complicated problems, Yay!).+We will see how the server-side translations is done in four steps(We will start with the simplest to the most complicated problems, Yay!).
 === Step 1: A single string === === Step 1: A single string ===
  
 To "pull this of", you only need the sentence file. To "pull this of", you only need the sentence file.
-Let's say we want a string that says "hello world!", Identified by '' HelloWorld ''+Let's say we want a string that says "hello world!", Identified by ''HelloWorld''
-Let's create a phrase entry in '' phrase_en.txt '':+Let's create a phrase entry in ''phrase_en.txt'':
  
-<code>HelloWorld ()+<code>HelloWorld()
 { {
 [Hello world!] [Hello world!]
Line 236: Line 236:
 Of course, you will also have to provide the same sentence in all supported languages, for example in file phrase_en.txt: Of course, you will also have to provide the same sentence in all supported languages, for example in file phrase_en.txt:
  
-<code>HelloWorld ()+<code>HelloWorld()
 { {
 [Bonjour le monde!] [Bonjour le monde!]
Line 243: Line 243:
 Notice that only the value of the text has changed. The sentence identifier ** MUST ** be the same in all translation files. Notice that only the value of the text has changed. The sentence identifier ** MUST ** be the same in all translation files.
  
-=== Step 2: Workaround for "clause_ <lang> .txt" ===+=== Step 2: Workaround for "clause_<lang>.txt" ===
 In the 4th step, we will see that the file-sentences can become very complex. Therefore is these kind of files not very suitable if you(for example) want to give it to a professional translator without the proficiency in complex file grammatics. Even worse, the complexity of the file may hide the translation work itself. In the 4th step, we will see that the file-sentences can become very complex. Therefore is these kind of files not very suitable if you(for example) want to give it to a professional translator without the proficiency in complex file grammatics. Even worse, the complexity of the file may hide the translation work itself.
  
Line 251: Line 251:
 Let's go back to the previous, above example.. with a "workaround". Let's go back to the previous, above example.. with a "workaround".
  
-In '' phrase_en.txt '', create the sentence entry like this:+In ''phrase_en.txt'', create the sentence entry like this:
 <code>HelloWorld () <code>HelloWorld ()
 { {
Line 257: Line 257:
 }</code> }</code>
  
-As you can see, we only need to put an identifier in the sentence block. This means that the phrase refers to a string identified as '' Hello '' in the clause file.+As you can see, we only need to put an identifier in the sentence block. This means that the phrase refers to a string identified as ''Hello'' in the clause file.
  
-Maintenant, nous pouvons créer la valeur textuelle dans ''clause_en.txt'' :+Now we can create the text value in ''clause_en.txt'':
  
   Hello [Hello world!]   Hello [Hello world!]
Line 266: Line 266:
  
 <WRAP center round tip 80%> <WRAP center round tip 80%>
-To facilitate the translation work, it is possible to specify the string identifier ** AND ** the value identifier. This can be useful for automatically building a translation file from the original file.+To facilitate the translation work, it is possible to specify the string identifier **AND** the value identifier. This can be useful for automatically building a translation file from the original file.
 Exemple : Exemple :
  
Line 273: Line 273:
 Hello [Bonjour le monde!] Hello [Bonjour le monde!]
 }</code> }</code>
 +
 +</WRAP>
  
 In a case like this, the translation system always looks first in the clause file, and then falls back on the text value in the sentence file ONLY if it does NOT find a string in the clause file. In a case like this, the translation system always looks first in the clause file, and then falls back on the text value in the sentence file ONLY if it does NOT find a string in the clause file.
Line 283: Line 285:
 Each sentence can receive a list of parameters. Each sentence can receive a list of parameters.
  
-These parameters can be of different types :+These parameters can be of different types:
   * item, //(object)//   * item, //(object)//
   * place, //(emplacement)//   * place, //(emplacement)//
Line 313: Line 315:
 Each parameter receives a name (or id) from its declaration. We call it paramName. Each parameter receives a name (or id) from its declaration. We call it paramName.
  
-Each type of parameter ** MAY ** be associated with a 'word' file. This file is an excel sheet (in unicode text export format) containing the translation of the parameter: its name, an indefinite or defined article ( 'a', 'le' ...), the plural of the name and The article, and any useful property or grammatical element necessary for translation.+Each type of parameter **MAY** be associated with a 'word' file. This file is an excel sheet (in unicode text export format) containing the translation of the parameter: its name, an indefinite or defined article( 'a', 'le' ...), the plural of the name and The article, and any useful property or grammatical element necessary for translation.
  
 The first column is very important because it associates a data line with a particular value of the parameter. The first column is very important because it associates a data line with a particular value of the parameter.
Line 322: Line 324:
  
 <WRAP center round important 60%> <WRAP center round important 60%>
-NB: The first column ** MUST ** always be the association field and you will need to have a '' name '' column as it is the default value for the parameters. Any other column is optional and can vary from one language to another to match the various specific grammatical constraints.+NB: The first column **MUST** always be the association field and you will need to have a ''name'' column as it is the default value for the parameters. Any other column is optional and can vary from one language to another to match the various specific grammatical constraints.
 </WRAP> </WRAP>
  
Line 463: Line 465:
    * For the same sentence, each language can provide its own set of conditions and clauses to adapt to its grammatical needs.    * For the same sentence, each language can provide its own set of conditions and clauses to adapt to its grammatical needs.
  
-==== List of properties of hard-coded parameters ====+==== Property-list of hard-coded parameters ====
 Here you will find an exhaustive list of the properties of the hard-coded parameters. Here you will find an exhaustive list of the properties of the hard-coded parameters.
 These properties are always available even when no word file has been provided. These properties are always available even when no word file has been provided.
Line 478: Line 480:
 | Tribe |  | | Tribe |  |
 | Guild |  | | Guild |  |
-| Player | "name : nom du joueur +| Player | "name : Player name 
-| ::: | gender : genre du joueur dans le miroir" | +| ::: | gender : Kind of the player in the mirror" | 
-| Bot | "career : carrière du bot | +| Bot | "career : Career of bot | 
-| ::: | role : rôle du bot tel que défini dans  creature.basics.chatProfile | +| ::: | role : Role of the bot as defined in creature.basics.chatProfile | 
-| ::: | name : nom de la créature +| ::: | name : Name of the creature 
-| ::: | gender : genre de la créature (tiré ?) du modèle" |+| ::: | gender : Creature type (drawn?) From the model" |
 | Integer |  | | Integer |  |
 | Time |  | | Time |  |
 | Money |  | | Money |  |
 | Compass |  | | Compass |  |
-| dyn_string_id | Seuls les tests  != et == sont possiblesEssentiellement pour comparer un paramètre avec 0. | +| dyn_string_id | Only tests  != and == Are possibleEssentially to compare a parameter with 0. | 
-| string_id | Seuls les tests  != et == sont possiblesEssentiellement pour comparer un paramètre avec 0. | +| string_id | Only tests  != and == Are possibleEssentially to compare a parameter with 0. | 
-| self | "name : nom du joueur +| self | "name : Player name 
-| ::: | gender : genre du joueur dans le miroir" | +| ::: | gender : Kind of the player in the mirror" | 
-| creature_model | NB : utiliser le fichier de traduction creature_words ! | +| creature_model | NB : Use the creature_words translation file ! | 
-| entity | "== 0, != 0 : teste si l'entité est Unknown (inconnueou non +| entity | "== 0, != 0 : Tests whether the entity is Unknown (unknownor not 
-| ::: | name : nom de la créature ou nom du joueur +| ::: | name : Name of the creature or name of player 
-| ::: | gender : genre de la créature (tiré ?) du modèle ou genre du joueur (d'après l'info du joueur)" |+| ::: | gender : Creature type (drawn?) Of the player's model or gender (based on player info)" |
 | bodypart |  | | bodypart |  |
 | score |  | | score |  |
Line 503: Line 505:
 | bot_name |  | | bot_name |  |
  
-===== Workflow de traduction ===== +===== Translation Workflow ===== 
-Dans le worklow de traduction ci-dessousnous considérons que la langue de référence est l'anglais.+In the translation workflow belowwe consider that the reference language is English.
  
-Il y une série d'outils et de fichiers bat pour aider à synchroniser les traductionsVoici une description point par point de comment travailler sur un fichier de traductionquel outil utiliser et quand.+There is series of tools and beats files to help synchronize translationsHere is a step-by-step description of how to work on a translation filewhich tool to use and when.
  
-Seuls les ajouts aux fichiers de traduction existants sont supportés par les outils de traductionSi vous souhaitez modifier ou supprimer une chaîne ou une phrase de traduction existantece sera à faire 'à la mainavec un maximum d'attention dans toutes les versions linguistiques.+Only additions to existing translation files are supported by the translation toolsIf you want to edit or delete an existing translation string or phrase, it will be done 'by handwith maximum attention in all language versions.
  
-Dans la plupart des casil vaut mieux créer une nouvelle entrée de traductionplutôt que de gérer une modification dans tous les fichiers de traductionet il est à peu près sûr de laisser les vieilles chaînes inutilisées dans les fichiers.+In most casesit is better to create a new translation entryrather than manage a change in all translation filesand it is almost safe to leave the old unused strings in the files.
  
-En tous casvous ne devez **JAMAIS** faire de modifications quand il y a des fichiers diff en attente.+In any caseyou must ** NEVER ** make changes when there are pending diff files.
  
 <WRAP center round important 60%> <WRAP center round important 60%>
-Il est fortement recommandé de respecter scrupuleusement le workflow décrit pour éviter les problèmes de traductionles chaînes manquantes ou autres problèmes bizarres qui pourraient se produire en travaillant avec plusieurs versions linguistiques d'un ensemble de fichiers.+It is strongly recommended that you strictly follow the described workflow to avoid translation problemsmissing strings, or other bizarre problems that might occur when working with multiple language versions of a set of files.
 </WRAP> </WRAP>
  
-Le travail de traduction se fait en collaboration entre l'éditeurqui fait la partie 'techniquedu travailet un traducteur professionnel sous-contrat qui traduit uniquement des chaînes simples en chaînes riches et de très haute qualité en respectant le contexte.+The translation work is done in collaboration between the publisherwho is the 'technicalpart of the workand a professional translator subcontracts that translates only simple strings into rich chains and of very high quality while respecting the context.
  
-L'outil qui génère le fichier diff pour la traduction garde les commentaires de la version de référenceCeci peut être utile pour fournir des informations supplémentaires au traducteur au sujet du contexte du texte.+The tool that generates the diff file for translation keeps the comments of the reference version. This can be useful to provide additional information to the translator about the context of the text.
  
-De pluspour le fichier de phrasesle fichier diff inclut automatiquement les commentaires qui décrivent la liste de paramètres.+In additionfor the sentences filethe diff file automatically includes comments that describe the parameter list.
  
 <WRAP center round important 60%> <WRAP center round important 60%>
-Par défaut il semble que le système travaille avec des fichiers ISO-8859-15 etpas UTF8 donc si vous obtenez des résultats étranges avec les commandesc'est sûrement dû à un encodage UTF8 de votre fichier.+By default it seems that the system works with ISO-8859-15 files and not UTF8 so if you get strange results with commandsit's probably due to a UTF8 encoding of your file.
 </WRAP> </WRAP>
  
  
-==== Structure de l'entrepôt de traduction ==== +==== Structure of stored translation ==== 
-Tous les fichiers à traduire sont stockés dans une structure de répertoire bien définie, appelée ''entrepôt de traduction''Tout le travail de traduction est fait dans ce répertoire.+All files to be translated are stored in a well-defined directory structure called '' translation warehouse ''All translation work is done in this directory.
  
-Des outils sont fournis pour installer le fichier traduit dans le client et le répertoire du serveur après la fin du cycle de traduction. 
  
-  * ''translation/'' Répertoire racine pour la traduction +Tools are provided to install the translated file in the client and the server directory after the end of the translation cycle.
-  * ''languages.txt'' Un simple fichier texte qui contient tous les codes langues (ISO 639-2) avec lesquels nous travaillons (par exemple : en, fr, etc…). +
-  * ''work/'' C'est le point de départ pour l'ajout de nouveau contenu. Ce répertoire contient tous les fichiers qui peuvent être modifiés pour ajout. +
-  * ''diff/'' Contient tous les fichiers diff générés par les outils. C'est là que se fait l'essentiel du travail. Après l'opération de fusion qui intègre les diff traduits dans les fichiers de traduction, les fichiers diff sont déplacés dans le répertoire history. Quand des fichiers diff sont générés, ils sont préfixés avec un numéro de version calculé automatiquement à partir de l'horodatage Unix courant. Ceci permet de générer de nouveaux fichiers diff sans attendre que la traduction du diff soit faite. De plus, quand vous générez un nouveau fichier diff sans fichier diff fusionné, le nouveau diff ne contient que les différences. +
-  * ''history/'' Contient tous les fichiers diff qui ont été traduits et fusionnés. Utilisé pour des raisons de sauvegarde et de sécurité. +
-  * ''translated/'' Contient tous les fichiers traduits. Le contenu de ce répertoire est installé sur les entrepôts du client et du serveur lorsque le cycle de traduction est terminé. Vous ne devez jamais rien changer à la main dans ce repertoire à moins de savoir exactement ce que vous faites.+
  
-==== Traduction des noms de bot ====+  * ''translation/'' Root directory for translation 
 +  * ''languages.txt'' A simple text file that contains all the language codes (ISO 639-2) with which we work (for example: en, fr, etc ...). 
 +  * ''work/'' This is the starting point for adding new content. This directory contains all the files that can be modified to add. 
 +  * ''diff/'' Contains all the diff files generated by the tools. That is where most of the work is done. After the merge operation that integrates the translated diff into the translation files, the diff files are moved to the history directory. When diff files are generated, they are prefixed with a version number automatically calculated from the current Unix timestamp. This allows you to generate new diff files without waiting for the diff to be translated. In addition, when you generate a new diff file without a merged diff file, the new diff only contains the differences. 
 +  * ''history/'' Contains all diff files that have been translated and merged. Used for backup and security reasons. 
 +  * ''translated/'' Contains all translated files. The contents of this directory are installed on the client and server warehouses when the translation cycle is complete. You should never change anything by hand in this directory unless you know exactly what you are doing.
  
-La commande ''extract_bot_names'' analyse le fichier ''bot_names.txt'' en fonction des Primitives et si certains noms sont utilisés plusieurs fois dans celles-ciil doit transformer le nom du bot en un nom générique du type ''gn_nomgénérique'' dont la correspondance est crée dans le ''title_words'' correspondant.+==== Name translation of bots ==== 
 + 
 +The command ''extract_bot_names'' parses the file ''bot_names.txt'' according to the Primitives and if some names are used several times in itit must transform the name of the bot into a generic name of the type ''gn_genericname'' Whose match is created in the corresponding ''title_words''.
  
 <WRAP center round info 60%> <WRAP center round info 60%>
-Test à effectuer cf HexChatlog kerv30/12/2015 - 14:30  --- //[[wiki:user:yannk|Yann K]] 2015/12/30 14:42//+Test to perform cf HexChatlog kerv30/12/2015 - 14:30  --- //[[user:yannk|Yann K]] 2015/12/30 14:42//
 </WRAP> </WRAP>
  
  
-==== Chaîne statique sur le client ==== +==== Static string on the client ==== 
-=== Tâche initiale === +=== Initial task === 
-**Editeur  : ** +**Editor : ** 
-  * Créer le fichier de référence ''en.uxt' dans le répertoire ''work', remplir la première chaîne nécessaire ''LanguageName'' puis ajouter toutes les chaînes pour la version anglaise+  * Create the reference file ''en.uxt'' in the ''work'' directoryfill in the first necessary string ''LanguageName'' and add all strings for the English version. 
-  Générer les fichiers diff de chaînes statiques avec la commande ''make_string_diff''Ceci créera les fichiers ''diff'' pour tous les langages dans le répertoire ''diff''+   Generate diff files from static strings with the command ''make_string_diff''This will create ''diff'' files for all languages in the' 'diff' 'directory
-  Envoyer les fichiers diff au traducteur. +   Send diff files to the translator.
- +
-**Traducteur : ** +
-  * Traduire les fichiers diff. +
-  * Les renvoyer à l'éditeur. +
- +
-**Editeur : ** +
-  * Mettre les fichiers diff traduits dans le répertoire ''diff'' (ce qui écrasera les fichiers diff non traduits et les remplacera par les fichiers traduits). +
-  * Fusionner les fichiers diff traduits à l'aide de la commande ''merge_string_diff''. Cela créera les fichiers ''<lang>.uxt'' pour chaque langue dans le répertoire ''translated'' et déplacera le diff dans le dossier ''history''.+
  
-Une fois la tâche initiale terminée, le workflow entre en mode incrémental.+**Translator: ** 
 +  * Translate diff files. 
 +  * Return them to the editor.
  
-=== Tache incrémentale === +**Editor: ** 
-**Editeur** +  * Put the translated diff files in the ''diff'' directory(which will overwrite the untranslated diff files and replace them with the translated files). 
-  * Ajouter des chaînes dans le fichier de référence ''en.uxt'' dans le répertoire ''work''. +   * Merge diff files translated using the ''merge_string_diff'' command. This will create the ''<lang> .uxt'' files for each language in the ''translated'' directory and will move the diff to the ''history'' folder.
-  * Générer les fichiers diff de chaînes statiques avec la commande ''make_string_diff''. Ceci créera les fichiers diff pour chaque langue dans le dossier ''diff''+
-  * Envoyer les fichiers diff au traducteur.+
  
-**Traducteur** +After the initial task is completed, the workflow enters incremental mode.
-  * Traduire les fichiers diff. +
-  * Les renvoyer à l'éditeur.+
  
-**Editeur** +=== Incremental spot === 
-  Déposer les fichiers diff traduits dans le répertoire ''diff'' (ce qui écrasera les fichiers diff non traduits et les remplacera par les fichiers traduits)+**Editor** 
-  Fusionner les fichiers diff avec la commande ''merge_string_diff''Ceci appliquera les fichiers ''sdiff'' aux fichiers ''<lang>.uxt'' pour chaque langue dans le dossier ''translated'' et déplacera les diff dans le dossier ''history''.+ Add strings to the reference file ''en.uxt'in the ''work'' directory
 + Generate diff files from static strings with the command ''make_string_diff''This will create the diff files for each language in the ''diff'' folder. 
 + * Send diff files to the translator.
  
-==== Chaînes dynamiques sur le serveur ==== +**Translator** 
-=== Tâche initiale === +  * Translate diff files
-**Editeur** +  * Return them to the editor.
-  * Créer le fichier de référence ''phrase_wk.uxt'' dans le répertoire ''work'' et ajouter toutes les entrées de phrases pour la version anglaise. +
-  * Générer les fichiers de phrase diff avec la commande ''make_phrase_diff''. Ceci créera les fichiers diff pour chaque langue dans le répertoire diff. +
-  * Traduire le fichier de phrases diff. Ceci implique de bonnes connaissances de la structure grammaticale de chaque langue pour s'adapter aux règles des clauses de sélection. +
-  * Fusionner le fichier diff traduit à l'aide de la commande ''merge_phrase_diff''. Ceci créera tous les fichiers ''phrase_<lang>.txt'' dans le répertoire ''translated'' pour le fichier ''diff'' traduit, puis déplacera les fichiers diff dans le répertoire ''history''+
-  * Générer le fichier de clauses diff avec la commande ''make_clause_diff''. Ceci créera le fichier de clauses diff dans le répertoire diff pour toutes les langues. +
-  * Envoyer les fichiers de clauses diff au traducteur.+
  
-**Traducteur** +**Editor** 
-  * Traduire les fichiers de clauses diff. +  * Deposit the translated diff files to the ''diff'' directory(which will overwrite the untranslated diff files and replace them with the translated files)
-  Les renvoyer à l'éditeur.+   Merge diff files with the command ''merge_string_diff''. This will apply the ''sdiff'' files to the ''lang '.uxt'' files for each language in the ''translated'' folder and will move the diff into the ''history'folder.
  
-**Editeur** +==== Dynamic strings on the server ==== 
-  Déposer les fichiers de clause diff traduits dans le répertoire ''diff'' (ce qui écrasera les fichiers de clause diff non traduits et les remplacera par les fichiers traduits)+=== Initial task === 
-  Fusionner les fichiers de clause diff avec la commande ''merge_clause_diff''Ceci créera les fichiers ''clause_<lang>.txt'' pour chaque langue dans le répertoire ''translated'' et déplacera les ''diff'' dans le répertoire ''history''.+**Editor** 
 +Create the reference file ''phrase_wk.uxt'' in the ''work'' directory and add all sentence entries for the English version. 
 +   * Generate diff phrase files with the command ''make_phrase_diff''. This will create the diff files for each language in the diff directory
 +   Translate sentences file diff. This implies good knowledge of the grammatical structure of each language to adapt to the rules of the selection clauses. 
 +   * Merge the translated diff file with the command ''merge_phrase_diff''This will create all the files ''phrase_ <lang>.txt'' in the ''translated'' directory for the translated diff file, and then move the diff files to the ''history'' directory. 
 +   * Generate the diff clauses file with the command ''make_clause_diff''. This will create the diff clauses file in the diff directory for all languages. 
 +   * Send the diff clauses files to the translator.
  
-Une fois la tâche initiale accomplie, le workflow entre en mode incrémental+**Translator** 
 +   * Translate clauses files diff. 
 +   * Return them to the editor. 
 +**Editor** 
 +* Deposit translated diff files in the ''diff'' directory(which will overwrite the untranslated diff clause files and replace them with the translated files). 
 +   * Merge the diff clause files with the command ''merge_clause_diff''. This will create the ''clause_<lang>.txt'' files for each language in the ''translated'' directory and move the ''diff'' into the ''history'' directory.
  
-=== Tache incrémentale === +Once the initial task has been completed, the workflow enters incremental mode.
-**Editeur**  *  +
-  * Ajouter la nouvelle phrase dans ''phrase_wk.uxt'' dans le dossier ''work''+
-  * Générer les fichiers de phrase diff avec la commande ''make_phrase_diff''. Ceci créera les fichiers diff pour chaque langue dans le répertoire ''diff''+
-  * Traduire le fichier de phrase diff. Ceci implique de bonnes connaissances de la structure grammaticale de chaque langue pour s'adapter aux règles de sélection des clauses. +
-  * Fusionner les fichiers diff traduits à l'aide de la commande ''merge_phrase_diff''. Ceci ajoutera les diff à leurs fichiers ''phrase_<lang>.txt'' respectifs dans le répertoire ''translated'' puis déplacera les fichiers diff dans le répertoire ''history''+
-  * Générer les fichiers de clauses diff avec la commande ''make_clause_diff''. Ceci créera le fichier de clause diff dans le répertoire ''diff''+
-  * Envoyer les fichiers de clause diff au traducteur.+
  
-**Traducteur** +=== Incremental spot === 
-  Traduire les fichiers de clauses diff. +**Editor**  *  
-  Les renvoyer à l'éditeur.+* Add the new sentence to ''phrase_wk.uxt'' in the ''work'' folder. 
 +   * Generate diff phrase files with the command ''make_phrase_diff''. This will create the diff files for each language in the ''diff'' directory. 
 +   * Translate the diff file. This implies a good knowledge of the grammatical structure of each language to adapt to the rules of selection of the clauses
 +   * Merge diff files translated using the command ''merge_phrase_diff''. This will add the diff to their respective ''phrase_<lang>.txt'' files in the ''translated'' directory and then move the diff files to the ''history'' directory
 +   Generate the diff clauses files with the command ''make_clause_diff''. This will create the diff clause file in the ''diff'' directory. 
 +   * Send the diff clause files to the translator.
  
-**Editeur** +**Translator** 
-  * Déposer les fichiers de clause diff traduits dans le répertoire ''diff'' (ce qui écrasera les fichiers de clause non traduits et les remplacera par les fichiers traduits). +   * Translate clauses files diff. 
-  Fusionner les fichiers de clause traduits avec la commande ''merge_clause_diff''Ceci ajoutera les fichiers diff à leurs fichiers ''clause_<lang>.txt'' respectifs pour chaque langue dans le répertoire ''translated'' et déplacera les diff dans le répertoire ''history''.+   * Return them to the editor. 
 +**Editor** 
 +  * Deposit translated diff files in the ''diff'' directory(which will overwrite the untranslated clause files and replace them with the translated files). 
 +   Merge the translated clause files with the command ''merge_clause_diff''This will add the diff files to their respective ''clause_lang.txt'' files for each language in the ''translated'' directory and will move the diff to the ''history'' directory.
  
-==== Fichiers de mot côté serveur ====+==== Server-side word files ====
 <WRAP center round important 60%> <WRAP center round important 60%>
  
-<fs x-large>Cette partie est obsolète.</fs>+<fs x-large> This part is obsolete. </fs>
  
-Il faut désormais recourir à des outils égalementcomme pour les autres:+We must now also use toolsas for others:
  
 https://bitbucket.org/ryzom/ryzomcore/src/d69a3cd7fbd0757f7acbef68649229016b0d361c/code/ryzom/tools/translation/?at=compatibility-develop https://bitbucket.org/ryzom/ryzomcore/src/d69a3cd7fbd0757f7acbef68649229016b0d361c/code/ryzom/tools/translation/?at=compatibility-develop
Line 633: Line 634:
 3. Open files in "diff" directory 3. Open files in "diff" directory
 4. Replace original text with translation (separators are <tab>) 4. Replace original text with translation (separators are <tab>)
-5. The 2 last lines : REMOVE THE FOLOWING TWO LINE WHEN TRANSLATION IS DONE and DIFF NOT TRANSLATED+5. The 2 last lines : REMOVE THE FOLLOWING TWO LINES WHEN TRANSLATION IS DONE and DIFF NOT TRANSLATED
 6. Save files 6. Save files
 7. Launch 6_merge_words_diff to merge your translations in "translated" 7. Launch 6_merge_words_diff to merge your translations in "translated"
Line 641: Line 642:
  
 <WRAP center round important 60%> <WRAP center round important 60%>
-NB : ‘mot’ (N.d.T. 'words', dans le texte d'originen'a aucun rapport avec le program Word de microsoft !+NB: 'word' (N.d.T. 'words', in the original texthas no relation to the Microsoft Word program!
 </WRAP> </WRAP>
  
-Les fichiers de mots sont toujours mis à jour à la main parce qu'ils sont rarement mis à jour par l'éditeur (et, en général, uniquement pour de grosses mises à jour). De plusquand de nouvelles phrases sont traduitesil peut être nécessaire de créer et de remplir une nouvelle colonne dans l'un des fichiers de mots pour s'adapter à la traduction.+Word files are always updated manually because they are rarely updated by the editor(and usually only for large updates). In additionwhen new sentences are translatedit may be necessary to create and fill a new column in one of the word files to fit the translation.
  
-Il y donc juste un workflow, mais pas d'outils.+So there's just a workflow, but no tools.
  
-=== Taches initiales ===+=== Initial tasks ===
  
-**Editeur** +**Editor** 
-  Créer la feuille initiale pour chaque type de paramètre avec tous les identifiants possibles dans le langae de référence dans le répertoire translated. +Create the initial sheet for each parameter type with all possible identifiers in the reference language in the translated directory
-  Créer et remplire les colonnes par défaut ''name'' et ''p''+   Create and fill in the default columns ''name'' and ''p''
-  Créer les feuilles pour toutes les langues en copiant les feuilles de la langue de référence+   Create sheets for all languages by copying the sheets of the reference language
-  Créer et remplir toutes les colonnes de bases dépendantes de la langue+   Create and populate all language-dependent database columns
-  Envoyer toutes les feuilles au traducteur.+   Send all sheets to the translator.
  
-**Traducteur** +**Translator** 
-  Traduire toutes les feuilles dans toutes les languesen ajoutant éventuellement toutes les colonnes nécessaires+   Translate all sheets in all languagespossibly adding all necessary columns
-  Renvoyer les feuilles traduites à l'éditeur+   Return the translated sheets to the editor
-  Garder une copie des feuilles traduites comme référence pour la traduction des phrases et des clauses.+   Keep a copy of the translated sheets as a reference for translating sentences and clauses.
  
-**Editeur** +**Editor** 
-  Déposer les feuilles traduites dans le répertoire ''translated'', ce qui écrasera les anciennes.+   Place the translated sheets in the '' translated '' directorywhich will overwrite the old ones.
  
-Après cette tache initialeil y a deux événements possibles :+After this initial taskthere are two possible events:
  
-== Besoin d'une nouvelle colonne == +== Need a new column == 
-**Traducteur** +**Translator** 
-  Au moment de traduire un diff de phrase ou de clause, il apparaît qu'il manque une ou plusieurs nouvelles colonnes pour l'une des langues et un type de paramètre+   When translating a sentence or clause diffit appears that one or more new columns are missing for one of the languages and one parameter type. 
-  Définir les colonnes nécessaires+   Define required columns
-  Contacter l'éditeur pour vérifier qu'aucune mise à jour de feuille n'est en attenteSi ouiappliquer d'abord le workflow pour //le nouveau contenu de feuilles//. +   Contact the publisher to verify that no sheet updates are pendingIf sofirst apply the workflow for // the new sheet content //. 
-  Ajouter les nouvelles colonnes et les remplir dans les feuilles langues concernées+   Add the new columns and fill them in the relevant sheets/languages
-  Envoyer les feuilles à l'éditeur.+   Send the sheets to the editor.
  
-**Editeur** +**Editor** 
-  Déposer les nouvelles feuilles dans le répertoire translated, ce qui écrasera les anciennes.+   Place the new sheets in the translated directorywhich will overwrite the old ones.
  
-== Nouveau contenu de feuilles == +== New sheet contents == 
-**Editeur** +**Editor** 
-  Le nouveau contenu de jeu est à intégrer dans le jeu+   The new game content is to be integrated into the game
-  Contacter le traducteur pour vérifier qu'aucune mise à jour de feuilles n'est en coursSi ouiappliquer d'abord le workflow pour //besoin d'une nouvelle colonne//. +   Contact the translator to verify that no sheet updates are in progressIf sofirst apply the workflow to //need a new column//. 
-  Créer de nouvelles feuilles pour le langage de référenceet ne contenant que le nouveau contenu+   Create new sheets for the reference languageand containing only the new content
-  Ajouter et remplir les colonnes par défaut pour les nouvelles feuilles (voir //Taches initiales//). +   Add and populate the default columns for new sheets(see //Initial Tasks//). 
-  Créer les nouvelles feuilles pour toutes les langues en copiant les feuilles de la langue de référence+   Create new sheets for all languages by copying the sheets of the reference language
-  Ajouter toutes les colonnes pour respecter le format de feuille en courspour chaque type et chaque languemais NE PAS LES REMPLIR+   Add all columns to respect the current sheet format, for each type and languagebut DO NOT COMPLETE THEM
-  Envoyer les nouvelles feuilles au traducteur.+   Send the new sheets to the translator. 
 +**Translator** 
 +   * Translate the new sheets. 
 +   * Add new sheets to the end of existing sheets. 
 +   * Send the merge result to the editor. 
 +   * Keep the result of the merge for reference for the translation of sentences and clauses, and future additions of content.
  
-**Traducteur** +**Editor** 
-  Traduire les nouvelles feuilles. +   Place new sheets in the ''translated'' directorywhich will overwrite the old ones.
-  * Ajouter les nouvelles feuilles à la fin des feuilles existantes. +
-  * Envoyer le résultat de la fusion à l'éditeur. +
-  * Conserver le résultat de la fusion pour référence pour la traduction des phrases et des clauseset les futurs ajouts de contenu.+
  
-**Editeur** +==== Install translated filess ==== 
-  * Déposer les nouvelles feuilles dans le répertoire ''translated''ce qui écrasera les anciennes.+At the end of a translation cyclethe translated files must be installed in the client and server directory structures.
  
-==== Installer les fichiers traduits ==== +To do this, we use the command ''install_translation''. 
-A la fin d'un cycle de traduction, il faut installer les fichiers traduits dans les structures d'annuaire du client et du serveur.+The ''<lang>.uxt'' files are copied into the client structure in ''Ryzom/gamedev/language''
 +All other files are copied to ''Ryzom/data_shard''.
  
-Pour cela, on utilise la commande ''install_translation''+To apply the translation to the client, the publisher must make a patch.
-Les fichiers ''<lang>.uxt'' sont copiés dans la structure du client dans ''Ryzom/gamedev/language''+
-Tous les autres fichiers sont copiés dans ''Ryzom/data_shard''.+
  
-Pour appliquer la traduction sur le clientl'éditeur doit faire un patch.+To apply the translation to the serverjust enter the ''reload'' command on the ''InputOutputService''.
  
-Pour appliquer la traduction sur le serveuril faut juste entrer la commande ''reload'' sur le ''InputOutputService''.+===== Working with translation filesfrom the point of view of the programr ===== 
 +NeL / Ryzom programmers can use the translation system with a restricted number of calls.
  
-===== Travailler avec des fichiers de traduction, du point de vue du programmeur ===== +==== Accessing static client chains ==== 
-Les programmeurs NeL/Ryzom peuvent utiliser le système de traduction avec un nombre d'appels restreint.+To get the unicode string from an identifier string, use the class ''NLMISC::CI18N''.
  
-==== Accéder aux chaînes statiques du client ==== +Firstmake sure that the translation files ''* .uxt'' are available in the search path.
-Pour obtenir la chaîne unicode à partir d'une chaîne d'identifiantutiliser la classe ''NLMISC::CI18N''.+
  
-Tout d'abordil faut s'assurer que les fichiers de traduction ''*.uxt'' sont disponibles dans le chemin de recherche.+Thenit is possible to load a set of language strings by calling '' NLMISC :: CI18N :: load (languageCode) ''.
  
-Ensuiteil est possible de charger un ensemble de chaînes de langue en appelant ''NLMISC::CI18N::load(languageCode)''.+The ''languageCode'' parameter is the language code as defined in Chapter 2 'Language code'
 +Thencall the method ''NLMISC::CI18N::get(identifier)'' to get the unicode string associated with the identifier. 
 +==== Dynamic Chains ==== 
 +A dynamic string requires a little more work and a complete instance infrastructure.
  
-Le paramètre ''languageCode'' est le code langue tel que défini au chapitre 2 “Code langue”. +Dynamic String Management involves a query service //(RQS)//, the InputOutputService //(IOS)//, the FrontEnd //(FE)//, the ryzom client, plus the basic services to run The others(naming, tick, mirror).
-Ensuite, appeler la méthode ''NLMISC::CI18N::get(identifier)'' pour obtenir la chaîne unicode associée à l'identifiant. +
- +
-==== Chaînes dynamiques ==== +
-Une chaîne dynamique nécessite un peu plus de travail et une infrastructure d'instance complète. +
- +
-La gestion des chaînes dynamiques implique un service de requête //(RQS)//, le InputOutputService //(IOS)//, le FrontEnd //(FE)//, le client ryzom, plus les services de bases pour faire tourner les autres (nommage, tick, miroir).+
  
 {{ :fr:rc_loc2.jpg |}} {{ :fr:rc_loc2.jpg |}}
  
-RQS est un service qui nécessite d'envoyer une chaîne dynamique au client.+RQS is a service that requires sending a dynamic string to the client.
  
-RQS envoie également l'identifiant de chaîne dynamique au client en utilisant la base de données ou n'importe quelle autre méthode.+RQS also sends the dynamic string identifier to the client using the database or any other method.
  
-Le proxy est un petit morceau de code qui construit et envoie le message de PHRASE au service IOS.+The proxy is a small piece of code that builds and sends the PHRASE message to the IOS service.
  
-IOS a la lourde charge de parser (analyser ?les paramètresen choisissant la bonne clause et en construisant la chaîne résultantepuis en envoyant un minimum de données au client.+IOS has the heavy burden of parsing(parsingthe parameterschoosing the right clause and constructing the resulting stringand then sending a minimum amount of data to the client.
  
-Le client reçoit la phrase et demande tout élément manquant de la chaîne à l'IOS.+The client receives the phrase and requests any missing element from the string to the IOS.
  
-==== Construire une liste de paramètres en envoyer la chaîne ==== +==== Build a list of string sending parameters ==== 
-Pour accéder au proxy, il faut inclure ''game_share/string_manager_sender.h'' et le lier avec ''game_share.lib''.+To access the proxy, you must include ''game_share/string_manager_sender.h'' and link it with ''game_share.lib''.
  
-Il faut d'abord construire la liste des paramètresCe qui se fait en remplissant un vecteur de ''STRING_MANAGER::TParam struture''Pour chaque paramètreil faut définir le champ ''Type'', puis écrire la donnée appropriée pour le membre.+The list of parameters must first be constructedThis is done by filling a vector of ''STRING_MANAGER::TParam struture''For each parameterdefine the "Type" field and write the appropriate data for the member.
  
-Il FAUT respecter exactement la définition des paramètres de phrase du fichier de phrases.+You must respect exactly the definition of the sentence parameters of the sentence file.
  
-On peut alors appeler :+We can then call:
 <code>uint32 STRING_MANAGER::sendStringToClient( <code>uint32 STRING_MANAGER::sendStringToClient(
 NLMISC::CEntityId destClientId, NLMISC::CEntityId destClientId,
 const std::string &phraseIdentifier, const std::string &phraseIdentifier,
 const std::vector<STRING_MANAGER::TParam> parameters</code>) const std::vector<STRING_MANAGER::TParam> parameters</code>)
 +''DestClientId'' is the identifier of the destination client, ''phraseIdentifier'' is the identifier as written in the phrase file, ''parameters'' is the parameter vector you built before.
  
-''destClientId'' est l'identifiant du client de destination, ''phraseIdentifier'' est l'identifiant tel qu'écrit dans le fichier de phrase, ''parameters'' est le vecteur de paramètres que vous avez construit auparavant. +This function returns the dynamic ID assigned to this phrase.
- +
-Cette fonction renvoie l'ID dynamique attribué à cette phrase.+
  
-Exemple envoyer la phrase kill a creature’ (cf. § 5.2, étape 4) :+Examplesend the phrase 'kill a creature'(see § 5.2, step 4):
  
-<code>// inclure la définition du gestionnaire de chaîne du proxy +<Code> // include the definition of the proxy string manager 
-#include game_share/string_manager_sender.h+#include "game_share / string_manager_sender.h"
  
 uint32 killCreatureMessage( uint32 killCreatureMessage(
Line 768: Line 766:
 STRING_MANAGER::TParam param; STRING_MANAGER::TParam param;
  
-// d'abordil nous faut la race de la créature+// Firstwe need the race of the creature
 param.Type = STRING_MANAGER::creature; param.Type = STRING_MANAGER::creature;
 param.Enum = race; param.Enum = race;
 params.push_back(param); params.push_back(param);
  
-// ensuite, le nombre de créatures à tuer+// Then the number of creatures to kill
 param.Type = STRING_MANAGER::integer; param.Type = STRING_MANAGER::integer;
 param.Int = nbToKill; param.Int = nbToKill;
 params.push_back(param); params.push_back(param);
  
-// et maintenant, envoyer le message+// And now send the message
 uint32 dynId = STRING_MANAGER::sendStringToClient( uint32 dynId = STRING_MANAGER::sendStringToClient(
 destClient, destClient,
Line 787: Line 785:
 }</code> }</code>
  
-==== Membre à remplir dans TParam en fonction du type de paramètre ==== +==== Member to fill in TParam depending on the parameter type ==== 
-  itemRemplit le SheetId avec l'identifiant de l'item +   ItemFills the SheetId with the identifier of the item 
-  placeRemplit l'identifiant de la chaîne avec l'identifiant de l'emplacement +   PlaceFills the identifier of the string with the identifier of the location 
-  creatureRemplit EId avec l'id de l'entité créature +   CreatureFills EId with the id of the creature entity 
-  skillRemplit Enum avec la valeur enum de SKILLS::ESkills +   SkillFills Enum with the enum value of SKILLS::ESkills 
-  ecosystemRemplit Enum avec la valeur enum de ECOSYSTEM::EEcosystem +   EcosystemFills Enum with the enum value of ECOSYSTEM::EEcosystem 
-  raceRemplit Enum avec la valeur enum de GSPEOPLE::EPeople +   RaceFills Enum with the enum value of GSPEOPLE::EPeople 
-  brickRemplit SheetId avec l'identifiant de la brique +   BrickFills SheetId with brick ID 
-  tribepas encore défini +   Tribenot defined yet 
-  guildpas encore défini +   Guildnot yet defined 
-  playerRemplit EId avec l'identifiant du joueur +   PlayerFills EId with player ID 
-  botRemplit EId avec l'identifiant du bot +   BotFills EId with the identifier of the bot 
-  integerRemplit Int avec la valeur integer/entière (sint32) +   IntegerFills Int with the value integer/integer(sint32) 
-  time: Remplit Time avec la valeur time/temporelle (uint32) +   * Time: Fills time with time/time(uint32) 
-  money: Remplit Money avec la valeur money/monétaire (uint64) +   * Money: Fills money with money/monetary value(uint64) 
-  compasspas encore défini +Compassnot yet defined 
-  dyn_string_idRemplit StringId avec un identifiant de chaîne dynamique +   Dyn_string_idFills StringId with a dynamic string identifier 
-  string_idRemplit StringId avec un identifiant de chaîne +   String_idFills StringId with string identifier 
-  creature_modelRemplit SheetId avec l'identifiant de la créature +   Creature_modelFills SheetId with credential ID 
-  entityRemplit EId avec l'entité de la créaturedu PNJ ou du joueur +   EntityFills EId with the entity of the creatureNPC or player 
-  body_partRemplit Enum avec la valeur enum value de BODY::TBodyPart +   Body_partFills Enum with the enum value of BODY::TBodyPart 
-  scoreRemplit Enum avec la valeur enum de SCORES::TScores +   ScoreFills Enum with the enum value of SCORES::TScores 
-  sphraseRemplit SheetId avec l'identifiant de la phrase +   SphraseFills SheetId with the phrase id 
-  characteristicRemplit Enum avec la valeur enum de CHARACTERISTICS::TCharacteristic +   CharacteristicFills Enum with the enum value of CHARACTERISTICS::TCharacteristic 
-  damage_typeRemplit Enum avec la valeur enum de DMGTYPE::EDamageType +   Damage_typeFills Enum with the enum value of DMGTYPE::EDamageType 
-  bot_nameRemplit Identifier avec le nom du bot sans la fonction +   Bot_nameFill in Identifier with the name of the bot without the function 
-  literalRemplit Literal avec la chaîne Unicode littérale+   LiteralFills Literal with the Unicode string literal 
 +==== Accessing dynamic strings from the client ==== 
 +On the client side, accessing dynamic strings is quite simple. You just have to watch out for the delay in some cases.
  
-==== Accéder aux chaînes dynamiques depuis le client ==== +Once the dynamic string identifier is retrieved from anywhere(for examplefrom the database), you just have to probe(pol?) The ''getDynString method'' of ''STRING_MANAGER::CStringManagerClient'' .
-Côté clientaccéder aux chaînes dynamiques est assez simple. Il faut juste faire attention au délai de transmission dans certains cas.+
  
-Une fois l'identifiant de chaîne dynamique récupéré d'où que ce soit (par exemplede la base de données), il faut juste sonder (pol ?le ''getDynString method'' de ''STRING_MANAGER::CStringManagerClient''.+The method returns false as long as ((N.d.T.: The original text says "until""until")) the requested string is incomplete or unknown.
  
-La méthode renvoie faux tant que((N.d.T. : le texte d'origine dit “jusqu'à ce que”“until”)) la chaîne demandée est incomplète ou inconnue.+Even if the method returns falseit can bring back a partial text, with missing replacement text.
  
-Même si la méthode renvoie fauxelle peut ramener un texte partielavec du texte de remplacement manquant.+Dynamic strings are dynamically storedand if the code is smart enoughit can free memory from dynamic strings when they are no longer needed by calling ''releaseDynString''.
  
-Les chaînes dynamiques sont stockées dynamiquementet si le code est suffisamment intelligentil peut libérer la mémoire des chaînes dynamiques quand celles-ci ne sont plus utiles en appelant ''releaseDynString''.+To be more efficientit is possible to call each frame() the getDynString method until it returns truethen store the string and call ''releaseDynString''.
  
-Pour être plus efficace, on peut appeler chaque cadre(((NDT : each frame ?)) la méthode ''getDynString'' jusqu'à ce que celle-ci renvoie vrai, puis stocker la chaîne et appeler ''releaseDynString''+''STRING_MANAGER::CStringManagerClient'' is based on a single schemeso you need to call ''STRING_MANAGER::CStringManagerClient::instance()'' to get a pointer to the single instance.
- +
-''STRING_MANAGER::CStringManagerClient'' est basé sur un schéma uniquedonc il faut appeler ''STRING_MANAGER::CStringManagerClient::instance()'' pour obtenir un pointeur vers l'instance unique.+
  
 Voici un exemple de code simple. Voici un exemple de code simple.
  
-<code>// inclure la définition du gestionnaire de chaîne du proxy+<code>// Include the definition of the proxy string manager
 #include “string_manager_client.h” #include “string_manager_client.h”
  
 using namespace STRING_MANAGER; using namespace STRING_MANAGER;
  
-/** Une méthode qui reçoit l'identifiant de chaîne dynamique +/ ** A method that receives the dynamic string identifier 
-et qui imprime la chaîne dynamique dans le log. +And prints the dynamic string in the log. 
-L'appeler à chaque frame/cadre jusqu'à valeur vraie +Call it to each frame / frame until true value 
-*/+* /
 bool foo(uint32 dynStringId) bool foo(uint32 dynStringId)
 { {
Line 861: Line 858:
 }</code> }</code>
  
-===== Guide de création de texte pour Ryzom =====+===== Text creation guide for Ryzom =====
  
-Il y a beaucoup de places pour le texte dans Ryzom, cette page va clarifier les conventions d'identification de textele contexte disponible pour l'insertion de texte et les paramètres contextuels de texte.+There are plenty of places for text in Ryzom, this page will clarify the text identification conventionsthe context available for text insertion and contextual text settings.
  
-==== Conventions pour les identifiants ==== +==== Conventions for identifiers ==== 
-=== Identifiants de chaînes dans en.uxt ===+=== String identifiers in en.uxt ===
  
-Ces identifiants sont écrits en minusculeavec une majuscule pour chaque nouveau mot.+These identifiers are written in lowercasewith a capital letter for each new word.
 Exemple: Exemple:
-  unIdentifiantSimple +  unIdentifierSimple 
-  unAutreIdentifiant+  unOtherIdentifier
    
-=== Identifiants de phrases dans phrase_en.txt ===+=== Identifiers of sentences in phrase_en.txt ===
  
-Ces identifiants sont écrits en majusculeset les mots sont séparés par “underscore.+These identifiers are written in uppercaseand the words are separated by "underscore".
  
-Exemple+Example
-  UN_IDENTIFIANT_SIMPLE +   UN_IDENTIFIER_SIMPLE 
-  UN_AUTRE_IDENTIFIANT+   UN_OTHER_IDENTIFIER
  
-=== Identifiants de chaînes (ou de clauses) dans clause_en.txt ===+=== Identifiers of strings(or clauses) in clause_en.txt ===
  
-Ces identifiants sont écrits comme des identifiants de chaîne dans ''en.uxt''.+These identifiers are written as string identifiers in '' en.uxt ''.
  
-Maiscomme ils sont à l'intérieure d'une définition de phraseils doivent contenir le nom des phrases comme nom de base. Le nom des phrases est en minuscule pour respecter la convention des identifiants de chaîne.+Butas they are inside a sentence definitionthey must contain the name of the phrases as the base nameThe name of the sentences is in lower case to respect the convention of the string identifiers.
  
-Exempledans une phrase appelée ''UNE_PHRASE_SIMPLE'', l'identifiant doit être +Examplein a sentence called ''AN_PHRASE_SIMPLE'', the identifier must be
-  unePhraseSimple+   anPhraseSimple
  
-De pluslorsqu'il y a plus d'une clause pour une phrase donnéel'identifiant de clause doit être suivi par quelques étiquettes qui donneront un indice au traducteur sur la signification de chaque clause. +In additionwhen there is more than one clause for a given sentencethe clause identifier must be followed by a few labels that will give the translator a clue as to the meaning of each clause. 
-Exempledans une phrase nommée ''UNE_PHRASE_SIMPLE'' et qui contient deux clauses, une pour le singulier et une pour le plurielnous pourrions avoir les identifiants suivants +Examplein a sentence named ''AN_PHRASE_SIMPLE'' and containing two clauses, one for the singular and one for the pluralwe could have the following identifiers
-  unePhraseSimpleS +  anPhraseSimpleS 
-  unePhraseSimpleP+  anPhraseSimpleP
  
-==== Contextes des textes ==== +==== Contexts of the texts ==== 
-=== Contexte “Chat” === +=== Context "Chat=== 
-Le contexte “Chat” englobe tous les textes qui viennent d'un PNJ via une fenêtre de chat et des bulles de texte.+The "Chat" context encompasses all texts that come from an NPC via chat window and text bubbles.
  
-== Le bot dit/crie en alentours ==+== The bot says shouts in the neighborhood ==
  
-Il n'y a qu'un paramètre disponible l'entité PNJ qui parle/crie.+There is only one parameter availablethe NPC entity that speaks/cries.
  
-Le nom de la phrase commence par ''SAY_''+The sentence name starts with ''SAY_''
  
-Exemple de phrase :+Sample sentence:
  
 <code>SAY_XXX (bot b) <code>SAY_XXX (bot b)
 { {
-     sayXxx    [Bonjour icije m'appelle $b$, quelqu'un m'entend ?]+     sayXxx    [Hello heremy name is $ b $, someone hears me ?]
 }</code> }</code>
  
-== Le bot parle au chef de l'escorte (un joueur) ==+== The bot talks to the escort leader (one player) ==
  
-Deux paramètres le bot qui parleet le joueur.+Two parametersthe talking bot, and the player.
  
-Le nom de la phrase commence par ''TALK_''+The sentence name starts with ''TALK_''
  
-Exemple de phrase :+Sample sentence:
 <code>     TALK_XXX (bot b, player p) <code>     TALK_XXX (bot b, player p)
 { {
-     talkXxx   [Bonjour $p$, je m'appelle $b$, j'ai besoin d'aide !]+     talkXxx   [Hi $ p $, my name is $ b $, I need help !]
 }</code> }</code>
  
-== Le bot parle/crie en réponse à un clic sur lui ==+== The bot speaks/cries in response to a "click" on him ==
  
-Deux paramètres le bot cliqué et le joueur.+Two parametersthe bot clicked and the player.
  
-Le nom de la phrase commence par ''CLICK_''+The sentence name starts with ''CLICK_''
  
-Exemple de phrase+Sample sentence
 <code>     CLICK_XXX (bot b, player p) <code>     CLICK_XXX (bot b, player p)
 { {
-     clickXxx  [Bonjour $p$, je m'appelle $b$, vous avez cliqué sur moi ?]+     clickXxx  [Hi $ p $, my name is $ b $, you clicked on me ?]
 } }
 </code> </code>
  
-=== Contexte interactif (également appelé botchat) === +=== Interactive context (also called botchat) === 
-Le botchat couvre tous les textes dans le dialogue interactif avec un PNJ.+The botchat covers all the texts in the interactive dialogue with an NPC.
  
-== Phrases liées aux missions == +== Sentences related to missions == 
-**Missions statiques**+** Static missions **
  
-Tous les noms de phrases liées à des missions ont une racine définie par le nom de la mission telle que positionnée dans le noeud de mision de l'éditeur de monde.+All mission-related sentence names have a root defined by the name of the mission as positioned in the mision node of the world editor.
  
-A partir de cette racineplusieurs extensions peuvent être ajoutées pour former des noms de phrase +From this rootseveral extensions can be added to form sentence names
-  * _TITLE : pour le titre de la mission +   * _TITLE: for the title of the mission 
-  * _STEP_X : pour le texte de l'étape X (les étapes de mission commencent à 1) +   * _STEP_X: for the text of step X(the mission steps start at 1) 
-  * _END : pour le texte de fin de mission.+   * _END: for the end-of-mission text.
  
 Exemple: Exemple:
-A partir d'une mission appelée INSTRUCTEUR_MIS_1, +From a mission called ^INSTRUCTOR_MIS_1
-Le titre sera INSTRUCTEUR_MIS_1_TITLE +The title will be INSTRUCTOR_MIS_1_TITLE 
-Le texte de l'étape de la mission sera INSTRUCTEUR_MIS_1_STEP_1 +The text of Stage of the mission will be INSTRUCTOR_MIS_1_STEP_1 
-Le texte de l'étape de la mission sera INSTRUCTEUR_MIS_1_STEP_2 +The text of Stage of the Mission will be INSTRUCTOR_MIS_1_STEP_2 
-Le texte de fin de mission sera INSTRUCTEUR_MIS_1_END |+The end-of-mission text will be INSTRUCTOR_MIS_1_END |
  
-Paramètres +Settings 
-  * XXXXXXX_TITLE (bot b, player p) +   * XXXXXXX_TITLE (bot b, player p) 
-    b est le bot à qui le joueur parle +     B is the bot to which the player speaks 
-    p est le joueur +     P is the player 
-  * XXXXXXX_STEP_X (bot giver, bot current, bot target, bot previous, player p) +   * XXXXXXX_STEP_X (bot giver, bot current, bot target, bot previous, player p) 
-    giver est le donneur de la mission +     Giver is the donor of the mission 
-    current est le bot à qui le joueur parle +     Current is the bot to which the player speaks 
-    target est le bot à aller voir pour la prochaine etape +     Target is the bot to go for the next step 
-    previous est le bot vu à l'étape précédente +     Previous is the bot seen in the previous step 
-    p est le joueur +     P is the player 
-  * XXXXX_END (bot current, bot giver, bot previous, player p) +   * XXXXX_END (bot current, bot giver, bot previous, player p) 
-    giver est le donneur de la mission +     Giver is the donor of the mission 
-    current est le bot à qui le joueur parle +     Current is the bot to which the player speaks 
-    previous est le bot vu à l'étape précédente +     Previous is the bot seen in the previous step 
-    p est le joueur+     P is the player
  
-Les paramètres des textes d'étapes du journal dépendent de la nature de l'étape (voir avec Nicolas Brigand).+The parameters of the log's step texts depend on the nature of the stage(see Nicolas Brigand).
    
-Pour les textes de progression de mission dans le menu contextuelil en existe deux :+For mission progress texts in the context menu, there are two:
  
-  * MISSION_STEP_GIVE_ITEM_CONTEXT (bot giver, bot previous, item i) +   * MISSION_STEP_GIVE_ITEM_CONTEXT(bot giver, bot previous, item i) 
-  * MISSION_STEP_TALK_CONTEXT (bot giver, bot previous)+   * MISSION_STEP_TALK_CONTEXT(bot giver, bot previous)
  
-Le premier est le texte standard, le second est affiché quand on doit donner quelque chose au bot.+The first is the standard textthe second is displayed when you have to give something to the bot.
  
-== Contexte supplémentaire pour les entrées de menu == +== Additional context for menu entries == 
-Il est possible d'ajouter des entrées //informatives// simples dans le menu contextuel du bot. Cette partie est composée de deux phrases le nom affiché pour l'entrée de menu et le contenu de texte affiché après avoir cliqué sur l'entrée de menu.+It is possible to add //informative// simple entries in the context menu of the bot. This part consists of two sentencesthe name displayed for the menu entry and the text content displayed after clicking on the menu entry.
  
-Deux paramètres le bot support du menu de contexte et le joueur.+Two parametersthe context menu bot bot and the player.
  
-Le nom de la phrase commence par ''BC_MENU_'' pour l'entrée de menu et ''BC_MENUTEXT_''+The sentence name starts with ''BC_MENU_'' for the menu entry and ''BC_MENUTEXT_''
  
-=== Messages système (info de combat) === +=== System Messages(combat info) === 
-Les paramètres dépendent des phrasesmais il y quelques types de phrases bien définis :+The parameters depend on the sentencesbut there are few well defined types of sentences:
   * COMBAT_   * COMBAT_
   * MAGIC_   * MAGIC_
CC Attribution-Share Alike 4.0 International Driven by DokuWiki
en/rc_localisation_traduction.1479418466.txt.gz · Last modified: (external edit)

Licences Mentions légales Accueil du site Contact Inclusion