From 891e3f70197faa8b0f7a64ea229f377805eb0ac9 Mon Sep 17 00:00:00 2001 From: LeRatierBretonnien Date: Mon, 6 Apr 2020 23:20:27 +0200 Subject: [PATCH] Talents : Translation ongoing --- README.md | 10 +++- compendium/wfrp4e.talents.json | 70 +++++++++++++-------------- tools/foundry_wh4_bestiary_french.lua | 70 +++++++++++++++++++++++++++ 3 files changed, 113 insertions(+), 37 deletions(-) create mode 100644 tools/foundry_wh4_bestiary_french.lua diff --git a/README.md b/README.md index bdd7d31..c3032db 100644 --- a/README.md +++ b/README.md @@ -37,9 +37,15 @@ Pour le compendium : **!!! NE COMMENCEZ PAS A TRADUIRE QUELQUE CHOSE SANS ME CONTACTER !!!** -**Traductions en cours au 04/04/2020** +**Traductions en cours au 06/04/2020** -* compendium/talents -> Jerome Paire (Description) - Noms déja commités, reste description, en cours +* compendium/talents -> split en cours + -> Bless -> Jerôme Paire + -> Bookish:Contorsionist -> Dr.Droide + -> Coolheaded:Embezzle -> Moilu + -> Enclosed Fighter:Gregarious -> Gharazel + -> Gunner:Kingpin -> Dr.Droide + * Divers ajustements de termes ici et là - Debug en cours **Fait** diff --git a/compendium/wfrp4e.talents.json b/compendium/wfrp4e.talents.json index e01fe3b..9cdf67e 100644 --- a/compendium/wfrp4e.talents.json +++ b/compendium/wfrp4e.talents.json @@ -664,177 +664,177 @@ { "id": "Speedreader", "name": "Lecture rapide", - "description": "You read books at a voracious pace. You may reverse a failed Research Test if this will grant success. If the speed at which you read is important during combat, a successful Language Test lets you read and fully comprehend a number of pages per Round equal to your SL plus Speedreader level (minimum of 1, even if you fail the Test)." + "description": "Vous lisez les livres à une cadence effrenée. Vous pouvez inverser un Test de Recherche raté si cela permet de le réussir. Si la vitesse à laquelle vous lisez est importante pendant un combat, un Test de Langue réussi vous permet de lire et de bien comprendre un nombre de pages par Round égal à votre DR plus votre niveau de Lecture Rapide (minimum 1, même si vous avez raté le Test)." }, { "id": "Sprinter", "name": "Sprinter", - "description": "You are a swift runner. Your Movement Attribute counts as 1 higher when Running." + "description": "Vous êtes un coureur très rapide. Votre Attribut de Mouvement compte comme plus élevé de 1 lorsque vous Courez." }, { "id": "Step Aside", "name": "Pas de côté", - "description": "You are skilled at being where enemy weapons are not. If you use Dodge to defend against an incoming attack and win the Opposed Test, you may move up to 2 yards as you dive away, and no longer count as Engaged. None of your opponents will gain a Free Attack when you do this." + "description": "Vouss êtes doué pour être là ou les armes ennemies ne se trouvent pas. Si vous utilisez l'Esquive pour vous défendre contre une attaque et gagnez le Test opposé, vous pouvez vous déplacer jusqu'à 2 mètres alors que vous plongez. Cela peut vous déplacer au-delà de l'allonge de votre adversaire, ce qui signifie que vous n'êtes plus Engagé. Aucun de vos adversaires ne gagnera d'Attaque gratuite quand vous faites ce Pas de côté." }, { "id": "Stone Soup", "name": "Brouet", - "description": "You are used to getting by with less, and know how to survive lean times. You can subsist on half the amount of food required without any negative penalties (bar feeling really hungry), and need only test for Starvation every 3 days, not 2" + "description": "Vous avez l'habitude de vous débrouiller avec peu, et savez comment survivre aux périodes de vache maigre. Vous pouvez subsister avec la moitié de la nourriture nécessaire, sans pénalités négatives (vous empêchant d'avoir réellement faim), et vous avez seulement besoin d'effectuer un Test concernant la faim tous les 3 jours et pas 2 (voir page 181)." }, { "id": "Stout-hearted", "name": "Coeur vaillant", - "description": "

No matter how bad things get, you always seem to come back for more. You may attempt a Cool Test to remove a Broken Condition at the end of each of your Turns as well as at the end of the Round (168).

" + "description": "

Peu importe à quel point les choses vont mal, vous persévérez malgré tout. Vous pouvez tenter un Test de Calme pour retirer un Etat Brisé à la fin de chacun de vos Tours ainsi qu'à la fin du round (voir page 168 pour plus de détails).

" }, { "id": "Strider", "name": "Bon marcheur", - "description": "You are experienced in traversing difficult ground. You ignore all movement penalties when crossing over or through a specified terrain. Typical specialties include: Coastal, Deserts, Marshes, Rocky, Tundra, Woodlands." + "description": "Vous êtes expérimenté dans la traversée des terrains difficiles. Vous ignorez toutes les pénalités de Mouvement lorsque vous traversez un terrain spécifique. Les spécialisations courantes incluent: Littoral, Déserts, marécages, Rocailleux, Toundra, Régions boisées." }, { "id": "Strike Mighty Blow", "name": "Coup puissant", - "description": "You know how to hit hard! You deal your level of Strike Mighty Blow in extra Damage with melee weapons." + "description": "Vous savez comment frapper fort ! Vous infligez votre niveau de Coup Puissant en Dégats supplémentaires avec des armes de Corps à Corps." }, { "id": "Strike to Injure", "name": "Frappe blessante", - "description": "

You are an expert at striking your enemies most vulnerable areas. You inflict your level of Strike to Injure in additional Wounds when you cause a Critical Wound.

" + "description": "

Vous êtes un expert pour frapper vos ennemis aux endroits les plus vulnérables< Vous infligez votre niveau de Frappe Blessante en Blessures supplémentaires quand vous causez une Blessure Critique./p>" }, { "id": "Strike to Stun", "name": "Frappe assomante", - "description": "

You know where to hit an opponent to bring him down fast. You ignore the ‘Called Shot’ penalty to strike the Head Hit Location when using a melee weapon with the Pummel Quality. Further, you count all improvised weapons as having the Pummel Quality

" + "description": "

Vous savez où frapper un adversaire pour le faire tomber rapidement. Vous ignorez la pénalité due à la désignation d'une Localisation pour frapper à la Tête quand vous utilisez une arme de Corps à Corps avec l'Atout Assomante (voir page 297). De plus, vous considérez toutes les Armes Improvisées comme ayant l'atout Assomante.

" }, { "id": "Strong Back", "name": "Infatigable", - "description": "

You have a strong back that is used to hard work. You may add your levels in Strong Back to your SL in any Opposed Strength Tests, and can carry additional Encumbrance points of trappings (see page 293) equal to your level of Strong Back.

" + "description": "

Vous avez l'échine solide, rompue au dur labeur. Vous pouvez ajouter vos Niveaux d'Infatigable à votre DR dans tous les Tests opposés de Force et vous pouvez porter nombre de Points d'Encombrement supplémentaires (voir p.293) équivalent à votre niveau d'Infatigable.

" }, { "id": "Strong Legs", "name": "Bonnes jambes", - "description": "You have strong legs able to carry you great distances when you jump. Add your Strong Legs level to your SL in any Athletics Tests involving Leaping" + "description": "Vous avez des jambes solides capables de vos porter sur de grandes distances quand vous sautez. Ajoutez votre niveau de Bonnes Jambes à votre DR à tous les tests d'Athélisme impliquant Saut (voir page 166)." }, { "id": "Strong Swimmer", "name": "Nageur endurant", - "description": "You are an especially strong swimmer and used to holding your breath for a long time underwater. Gain a bonus of your level in Strong Swimmer to your Toughness Bonus for the purposes of holding your breath. Drowning and Suffocation" + "description": "Vous êtes un nageur particulièrement endurant et habitué à retenir votre souffle pendant une longue période sous l'eau. Gagnez un bonus à votre Bonus d'Endurance égal à votre Niveau de Nageur Endurant pour calculer le temps pendant leque vous retenez votre souffle." }, { "id": "Strong-minded", "name": "Obstiné", - "description": "You are the epitome of determination and resolve. Add your level in Strong Minded to your maximum Resolve pool." + "description": "Vous êtes la quintessence de la détermination et de la résolution. Ajoutez votre niveau d'Obstiné au maximum de votre réserve de Détermination." }, { "id": "Sturdy", "name": "Costaud", - "description": "You have a brawny physique, or are very used to carrying things. Increase the number of Encumbrance Points you can carry by your Sturdy level x 2" + "description": "Vous êtes musclé et habitué à porter des charges lourdes. Augmentez les Points d'Encombrement d'un nombre égal à votre niveau de Costaud x 2." }, { "id": "Suave", "name": "Affable", - "description": "You gain a permanent +5 bonus to your starting Fellowship Characteristic (this does not count towards your Advances)." + "description": "Vous gagnez un bonus permanent de +5 à votre Caractéristique Sociabilité de départ (ne compte pas comme des Augmentations)." }, { "id": "Super Numerate", "name": "Doué en calcul", - "description": "

You have a gift for calculation and can work out the solution to most mathematical problems with ease. You may use a simple calculator to represent what your PC is capable of mentally computing.

" + "description": "

Vous avez un don pour calculer et trouver facilement la solution de la plupart des problèmes mathématiques. Vous poivez utiliser une simple calculatrice pour simuler le fait que votre PJ est capable de compter mentalement.

" }, { "id": "Supportive", "name": "Coopératif", - "description": "

You know what to say and when to make the most impact upon your superiors. When you successfully use a social Skill to influence those with a higher Status tier, you can choose to either use your rolled SL, or the number rolled on your units die. So, a successful roll of 46 could be used for +6 SL.

" + "description": "

Vous savez ce qu'il faut dire et à quel moment pour avoir le plus d'impact sur vos supérieurs. Quand vous utilisez avec succès une Compétence sociale pour influencer ceux qui possèdent un plus haut Statut, vous pouvez choisir d'utiliser soit le DR, soit le chiffre des Unités du dé. Donc, un succès de 46 peut-être utilisé comme un DR de +6.

" }, { "id": "Sure Shot", "name": "Tir sûr", - "description": "

You know how to find the weak spots in a target’s armor. When you hit a target with a Ranged weapon, you may ignore Armor Points equal to your Sure Shot level.

" + "description": "

Vous savez comment trouver les points faibles de l'armure d'une cible. Quand vous la touchez, vous pouvez ignorer un nombr de PA égal à votre Niveau de Tir sûr.

" }, { "id": "Surgery", "name": "Chirurgie", - "description": "

You are a surgeon, able to open and close the flesh in order to heal others. You can treat any Critical Wound marked as needing Surgery. You can also perform surgery to resolve internal issues with an Extended Challenging (+0) Heal Test with a target SL determined by the GM (usually 5–10) depending upon the difficulty of the procedure at hand. This will cause 1d10 Wounds and 1 Bleeding Condition per Test, meaning surgery has a high chance of killing a patient if the surgeon is not careful. After surgery, the patient must pass an Average (+20) Endurance Test or gain a Minor Infection.

" + "description": "

Vous êtes un Chirurgien capable d'ouvrir et de refermer les chairs pour soigner. Vous pouvez traiter n'importe quelle Blessure Critique nécessitant de la Chirurgie pour résoudre des problèmes internes avec un Test étendu de Guérison Intermédiaire (+0) dont le DR cible est déterminé par le MJ (en général 5-10) en fonction de la difficulté de la procédure en cours. Cela fait 1d10 Blessures et 1 Etat Hémorragique, ce qui signifie que la Chirurgie a de fortes chances de tuer le patient si le praticien n'est pas rigoureux. Après la Chirurgie, le patient doit réussir un Test de Résistance Accessible (+20) ou gagner une Infection Mineure (voir page 187).

" }, { "id": "Tenacious", "name": "Persévérant", - "description": "You never give up, no matter how impossible your travails appear. You can double the length of time successful Endurance Tests allow you to endure a hardship. This includes enduring prolonged riding, exposure, rituals, and similar adversities" + "description": "Vous n'abandonnez jamais, même si les tâches paraissent impossibles. Vous pouvez doubler le temps que les Tests de Résistance réussis vous accordent pour supporter une difficulté. Cela inclut endurer une chevauchée prolongée, une exposition, des rituels et autres problèmes similaires." }, { "id": "Tinker", "name": "Bricoleur", - "description": "You are somewhat of a Johann-of-all-trades, able to repair almost anything. You count all non-magical Trade Skills as Basic when repairing broken items." + "description": "Vous êtes une sort de touche-à-tout, capable de réparer presque n'importe quoi. Vous considérez toutes les Compétences Métier non magiques comme étant de Base lorsque vous réparer des objets cassés." }, { "id": "Tower of Memories", "name": "Tour des souvenirs", - "description": "

A recollection technique first instigated by the Cult of Verena, reputedly from Elven practices taught by the Loremasters of Hoeth, Tower of Memories allows you to perfectly recall a sequence of facts by storing them in an imaginary spire. You can recall a sequence as long as your Intelligence without having to make a Test. For every 10 more items you attempt to memorize, you must make an increasingly difficult Intelligence Test to recall the list correctly, starting at Very Easy (+60) for +10, Easy (+40) for +20, Average (+20) for +30, and so on. Beyond it’s obvious utility for Gamble Tests, where having this Talent adds a bonus of +20 to +60 depending upon how useful recalling sequences is to the game at hand, the GM can apply bonuses to other Tests as appropriate. Each time you take this Talent you may recall an extra sequence without having to forget a previously stored one

" + "description": "

Une technique de mémorisation initiée par le Culte de Venera, réputée pour les pratiques elfiques enseignées par les Maîtres du savoir de Hoeth. Tour des souvenirs vous permet de vous rappeler parfaitement une série d'évènements en les mémorisant dansune tour imaginaire. Vous pouvez vous souvenir d'une série d'évènements pendant un temps égal à votre Intelligence sans avoir besoin d'effectuer de Test. Pour chaque Tranche de 10 éléments supplémentaires que vous tentez de mémoriser, vous devez effectuer un Test d'Intelligence donc la Difficulté augmente pour vous en souvenir correctement, en parte de Très facile (+60) pour 10+, Facile (+40) pour 20+, Accessible (+40) pour 30+, etc. Au-delà de son utilité évidente pour le Jeu (Pari), car ce Talent ajoute un bonus de +20 à +60, selon l'utilité de la mémorisation lors du jeu en cours, le MJ peut, si nécessaire, appliquer des Bonus aux autres Tests. Chaque fois que vous prenez ce Talent, vous pouvez vous rappeler une série supplémentaire d'évènements, sans avoir à en oublier une précedemment mémorisée.

" }, { "id": "Trapper", "name": "Trappeur", - "description": "You are skilled at spotting and using traps. You may take a Perception Test to spot traps automatically without having to tell the GM of your intention; the GM may prefer to make some of these Tests on your behalf in private." + "description": "Vous êtes doué pour repérer et utiliser des pièges. Vous pouvez effectuer un Test de Perception pour en repérer automatiquement, sans avoir à prévenir le MJ de votre intention; le MJ peut effectuer ces Tests secrètement, à votre place." }, { "id": "Trick Riding", "name": "Acrobaties équestres", - "description": "You are capable of amazing feats of agility on horseback. You can use any of your Performer Skills and unmodified Dodge skill when on horseback. Further, when mounted, you can make your Move at the start of the Round instead of on your Turn." + "description": "Vous êtes capable de prouesses incroyables à cheval. Vous pouvez utiliser n'importe laquelle de vos Compétences Représentation, et Esquive non modifiée, quand vous êtes à cheval. De plus, quand vous êtes en selle, vous pouvez effectuer votre Mouvement au début du round au lieu de votre Tour." }, { "id": "Tunnel Rat", "name": "Rat d'égout", - "description": "You are at home in tunnels, sewers, and other underground environments. When using Stealth in an underground environment, bystanders do not get passive Perception Tests to detect you; they can only spot you if they are specifically on look-out, or watching for hidden others." + "description": "Vous êtes à l'aise dans les tunnels, les égouts et tout autre environnement souterrain. Quand vous y utilisez Discrétion, ceux qui croisent votre chemin n'obtiennent pas de Tests de Perception passifs pour vous détecter; ils ne peuvent vous remarquer que s'ils sont spécifiquement à l'âffut ou à la recherche de personnes cachées." }, { "id": "Unshakable", "name": "Inébranlable", - "description": "

You are a jaded veteran who has survived more than one hail of shots from Blackpowder weapons. You need only take a Cool Test to resist a Broken Condition if you are successfully wounded by a Blackpowder weapon, not just if you are shot at 

" + "description": "

Vous êtes un Vétéran blasé qui a survecu à plus d'une rafale de tirs d'Armes à Poudre noire. Vous avez besoin d'effectuer un Test de Calme pour résister à un Etat Brisé, uniquement si vous êtes blessé avec un succès par une arme à Poudre noire, et pas juste touché.

" }, { "id": "Very Resilient", "name": "Très résistant", - "description": "You gain a permanent +5 bonus to your starting Toughness Characteristic (this does not count towards your Advances)." + "description": "Vous gagnez un bonus permanent de +5 à votre Caractéristique Endurance de départ (ne compte pas comme des Augmentations)." }, { "id": "Very Strong", "name": "Très fort", - "description": "You gain a permanent +5 bonus to your starting Strength Characteristic (this does not count towards your Advances)." + "description": "Vous gagnez un bonus permanent de +5 à votre Caractéristique Force de départ (ne compte pas comme des Augmentations)." }, { "id": "War Leader", "name": "Seigneur de guerre", - "description": "

Your stern gaze and inspiring words motivate your soldiers to fight on to the end. All subordinates able to see you may add your level in War Leader to their SL in one Willpower Test per Round. This bonus does not stack.

" + "description": "

Votre regard sévère et vos mots exaltants incitent vos soldats à se battre jusqu'au bout. Tous les subalternes capables de vous voir peuvent ajouter votre Niveau de Seigneur de Guerre au DR d'un Test de Force Mentale par Round. Ce bonus n'est pas cumulatif.

" }, { "id": "War Wizard", "name": "Mage de guerre", - "description": "You are trained to cast magic while in the thick of combat. On your Turn, you may cast one Spell with a Casting Number of 5 or less for free without using your Action. However, if you do this, you may not cast another spell this Turn." + "description": "

Vous êtes entraîné à faire appel à l amagie au milieu de combat. A votre Tour, vous pouvez lancer gratuitement un Sort avec un Niveau d'Incantation de 5 ou moins, sans utiliser votre Action. Cependant, si vous le faites, vous ne pouvez lancer aucun autre Sort ce Tour.

" }, { "id": "Warrior Born", "name": "Guerrier né", - "description": "

You gain a permanent +5 bonus to your starting Weapon Skill Characteristic (doesn't count as Advances).

" + "description": "

Vous gagnez un bonus permanent de +5 à votre Caractéristique de Combat (ne compte pas comme une Augmentation).

" }, { "id": "Waterman", "name": "Marinier", - "description": "You are an experienced freshwater sailor and are well-versed with river vessels. You can ignore all negatives to your Tests when onboard a barge derived from rolling waters, swaying vessels, unsure footing, and similar. Further, you count as two boatmen towards the minimum number of crew to pilot a river vessel." + "description": "

Vous êtes un navigateur expérimenté en eaux douces, habitué aux navires fluviaux. Vous pouvez ignorer toutes les pénalités à vos Tests quand vous vous trouvez à bord d'une barque qui dérive à cause des tourbillons, de navires qui tanguent, lorsqu'il vous êtes déséquilibré et autres situations similaires. De plus, vous comptez comme deux bateliers pour le nombre minimum de membres d'équipage nécessaires pour diriger un navire fluvial.

" }, { "id": "Wealthy", "name": "Nanti", - "description": "

You are fabulously wealthy, and are rarely ever short of coin. When Earning (including Income Endeavor) you secure +1 GC per time you have this Talent.

" + "description": "

Vous êtes fabuleusement riche, et rarement à court d'argent. Quand vous Gagnez de l'argent (y compris avec des Activités Revenus), vous gagnez + 1CO par nombre de fois ou vous avez pris ce Talent.

" }, { "id": "Well-prepared", "name": "Prévoyant", - "description": "

You are used to anticipating the needs of others, and yourself. A number of times per session equal to your level of Well-Prepared, you may pull the trapping required for the current situation from your backpack (or similar) as long as it is Encumbrance 0, could feasibly been bought recently, and doesn’t stretch credibility too far. This could be anything from a flask of spirits to fortify a wounded comrade to a pfennig-whistle needed by a passing entertainer. Whenever you do this, you must deduct the cost for the prepared item from your purse, representing the coin you spent earlier.

" + "description": "

Vous êtes habitués à anticiper les besoins des autres commes les vôtres. Un nombre de fois par séance égal à votre niveau de Prévoyant, vous pouvez sortir de votre sac à dos (ou similaire) l'équipement nécessaire à la situation actuelle, tant que son Encombrement est de 0, qu'il est crédible que vous l'ayez acheté recemment, et qu'il ne soit pas trop invraisemblable. Cela peut-être n'importe quoi, de la flasque d'alcool pour fortifier un camarade blessé au sifflet bon marché, absolument nécessaire pour un saltimbanque de passage. Chaque fois que vous le faites, vous devez déduire le coût de l'objet sorti de votre pour compenser l'argent dépensé plus tôt.

" }, { "id": "Witch!", "name": "Sorcier!", - "description": "You have learned magic through trial and error. Add Language (Magick) to any Career you enter; if it is already in your Career, you may purchase the Skill for 5 XP fewer per Advance. Further, you may spend 1 Resilience point to immediately cast any spell as if it were one of your Arcane Lore spells; you also instantly memorise that spell as one of your Arcane Lore spells for 0 XP. You can do this a number of times equal to your level in this Talent." + "description": "Vous êtes un lanceur de Sorts autodidacte qui a compris peu à peu comment utiliser la magie, par tâtonnements. Ajoutez Language (Magick) à n'importe quelle carrière que vous entamez; si elle est déja comprise dans votre Carrière, vou pouvez à la place acheter la compétence pour 5 PX de moins par Augmentation. De plus, vous pouvez dépenser un Point de résilience pour lancer (et mémoriser) un Sort provenant de n'importe quel Domaine de Magie, pour 0 PX. Vous pouvez le faire un nombre de fois égal à votre Niveau dans ce Talent." } ] } diff --git a/tools/foundry_wh4_bestiary_french.lua b/tools/foundry_wh4_bestiary_french.lua new file mode 100644 index 0000000..0219c20 --- /dev/null +++ b/tools/foundry_wh4_bestiary_french.lua @@ -0,0 +1,70 @@ + +package.path = package.path .. ";lua_scripts/libraries/luajson/?.lua" +local JSON = require"json" + +local path_in = "/home/sigmar/work/foundryvtt/WFRP-4th-Edition-FoundryVTT/packs/" +local traitsf = "/home/sigmar/work/foundryvtt/foundryvtt-wh4-lang-fr-fr/compendium/wfrp4e.traits.json" +local beastsf = "/home/sigmar/work/foundryvtt/foundryvtt-wh4-lang-fr-fr/compendium/wfrp4e.bestiary.json" +local f1 = io.open(path_in .. "bestiary.db") + +local f2 = io.open(traitsf) +local strjson = f2:read("*a") +f2:close() +local traits = JSON.decode(strjson) + +local f3 = io.open(beastsf) +local beastjson = f3:read("*a") +f3:close() +local beast_french = JSON.decode(beastjson) + +local function trim1(s) + return (s:gsub("^%s*(.-)%s*$", "%1")) +end + +local line = f1:read() +while line do + --print(line) + local beast = JSON.decode( line) + -- Get the french beast translation + local sel_beastfr + for _, beastfr in pairs(beast_french.entries) do + if beast.name:lower() == beastfr.id:lower() then + sel_beastfr = beastfr + break + end + end + if not sel_beastfr then print(">>>>>>>>>>>>>>> NO BEAST !!!", beast.name) end + + --print(beast.name, beast.items) + if beast.items then + for _, traitbeast in pairs( beast.items) do + --print(beast.name, traitbeast) + if traitbeast.name then + local found, ntentacle = false + local name, bonus_or_category = traitbeast.name:match("([%w%s]+)%s%(([%s%w]+)%)") + if not name then ntentacle, name = traitbeast.name:match("(%d)x%s*(Tentacles)") end + if not name then name = traitbeast.name end + for _, traitdata in pairs(traits.entries) do + if traitdata.id == trim1(name) then + found = true + traitbeast.name = traitdata.name + traitbeast.data.description.value = traitdata.description + --print(" Found trait " .. trait.name, traitdata.name) + break + end + end + if not found then + print(" > NOT FOUND !!!", beast.name, name, traitbeast.name) + end + end + end + sel_beastfr.items = beast.items + end + line = f1:read() +end +f1:close() + +local jsonout = JSON.encode( beast_french ) +local fout = io.open("beasts.json", "w+") +fout:write( jsonout ) +fout:close() \ No newline at end of file