pioneerspacesim / pioneer

A game of lonely space adventure
https://pioneerspacesim.net
1.59k stars 362 forks source link

Bad keys in translation files #5849

Open JeromeChignoli opened 3 days ago

JeromeChignoli commented 3 days ago

Hello.

I was having nil values in trade computer. Searching from source code i found bad keys in lang/ui.core/fr.json: i found {système} keys in TRADING_FROM and TRADING_TO sections. Assuming it was auto-translation issue (as système is system), i was curious to see if it was the only one...

in lang directory:

find -name '*.json' -exec sed -n '/[}{]/{s/^[^{]*//;s/[^}]*$//;s/}[^{]*{/}\n{/g;p}' {} \;|sort|uniq -c|sort -n

Interesting results with my 20240314 (8b6ae92) on Linux version: a lot of auto-translated keys and some typos. The real work will be to find the files... maybe by grep'ing the bad entries

EDIT: by "auto-translation" I mean "automatic translation". Tools are great but stupid.

impaktor commented 3 days ago

i found {système} keys in TRADING_FROM and TRADING_TO sections.

Looks like the translator has translated the variable name, which is a big no-no. Anything within {...} should not be translated.

Would be most excellent if you could fix it: https://wiki.pioneerspacesim.net/wiki/Translations

The real work will be to find the files... maybe by grep'ing the bad entries

Files are in data/lang/**/fr.json'

EDIT: Note: the changes should be done in transifex.

JeromeChignoli commented 2 days ago

Ok. Easy for french translations, but i will have to compare {} keys in the *.json for the others languages. I assume the en.json files are the correct ones, from which i can start ? A lot of sed, grep, awk and sort commands... i like sort ;)

impaktor commented 2 days ago

i will have to compare {} keys in the *.json for the others languages.

Well, variable names are always in English, so if you see any in French, that needs fixing.

Simplest is to just identify when/who made the error and check those. I don't know if that feature exist in Transifex, but either way, you can do a git log on the french files, and identify when the change was made (recently, I'd venture to guess). You can see all commits made that transfer changes from Transifex to master: https://github.com/pioneerspacesim/pioneer/commits?author=pioneer-transifex

Also, we intend to do a release within a few days, so if you have time to play around with this in the not too distant future that would be great.

impaktor commented 2 days ago

For anyone tagging along in the conversation, but not interested in running command in OP, result is below. Since we have 31 languages all occurrences should be multiples of 31, unless there's a parsing error, (which it looks like some lines are, where the whole sentence has been included).

E.g. I was curious about {body(r)} (the 4th hit in the output below) and it's is from Danish:

git grep -in "body(r)"
core/da.json:1460:    "message": "Stabilt system med %bodycount større %{body(r)} og %portcount %{starport(e)}"

going to line 1460 in en.json:

"message": "Stable system with %bodycount major %{body(s)} and %portcount %{starport(s)}"

Output from command in OP:

      1 {alcance}
      1 {Alcancemáximo}
      1 {area). Potrzebujesz hipernapędu zdolnego pokonać odległość {dist}
      1 {body(r)}
      1 {cach}
      1 {cache}
      1 {cash na misję w {area}
      1 {combustível}
      1 {companhia}
      1 {corporação}
      1 {dano}
      1 {datas}
      1 {data_vencimento}
      1 {date|}
      1 {datum}
      1 {distans}
      1 {equipamento}
      1 {equipement}
      1 {f-2}
      1 {komodity}
      1 {local}
      1 {metallegering}
      1 {missione}
      1 {Name}
      1 {newpaper}
      1 {orbit_peiod}
      1 {Percentualreparo}
      1 {playedrShipLabel}
      1 {playershipbalel}
      1 {population}
      1 {preço}
      1 {primary}
      1 {propietor}
      1 {randezvous}
      1 {{secondary_info}, tertiary_info}
      1 {Setorz}
      1 {shiplabel的星舰因燃料耗尽停在附近。 我们将向任何为该船加油的人支付{cash}
      1 {sim}
      1 {starport(e)}
      1 {systém}
      1 {systeme}
      1 {system] ({sectorx}
      1 {systemu}
      1 {systému}
      1 {tak}
      1 {taxa_anuidade}
      1 {valor}
      1 {základen}
      1 {星球}
      1 {现金}
      1 {系统}
      1 {行星}
      2 {areax}
      2 {carportame}
      2 {combustível_militar}
      2 {naam}
      2 {nein}
      2 {nome da nave}
      2 {nome do clube}
      2 {quantidade}
      2 {registro da nave}
      2 {secretary}
      2 {sectionx}
      2 {todo{ ton {cargotype}
      3 {grupo}
      3 {proprietário}
      3 {système}
      4 {base de lançamento}
      4 {Org}
      4 {radioativos}
      5 {carga}
      5 {jornal}
      5 {quantia}
      6 {geld}
      8 {cliente}
     10 {porto estelar}
     13 {doelwit}
     20 {distância}
     28 {data}
     29 {bases}
     29 {body(s)}
     29 {shipname}
     29 {shipregid}
     29 {starport(s)}
     29 {SYSTEM}
     30 {alloy}
     30 {company}
     30 {corp}
     30 {damage}
     30 {deliver_crew}
     30 {expiry_date}
     30 {fuel}
     30 {maxRange}
     30 {membership_fee}
     30 {money}
     30 {orbit_period}
     30 {range}
     30 {rendezvous}
     30 {repairPercent}
     30 {tertiary_info}
     30 {value}
     31 {age}
     31 {bodies}
     31 {body}
     31 {bodycount}
     31 {countdown}
     31 {coverage}
     31 {crime}
     31 {d08}
     31 {destination}
     31 {distance}
     31 {duration}
     31 {engineering}
     31 {experience}
     31 {faction}
     31 {faction_police}
     31 {general}
     31 {high_gravity}
     31 {level}
     31 {minutes}
     31 {N}
     31 {navigation}
     31 {newAmount}
     31 {overall}
     31 {parent_body}
     31 {percent}
     31 {piloting}
     31 {portcount}
     31 {potentialCrewMember}
     31 {press}
     31 {pressure}
     31 {resolution}
     31 {response}
     31 {save}
     31 {seconds}
     31 {sensors}
     31 {ship_label}
     31 {tech_level}
     31 {total_docking_pads}
     31 {type}
     31 {units}
     31 {x}
     31 {y}
     31 {z}
     32 {path}
     34 {sectorX}
     34 {sectorY}
     34 {sectorZ}
     36 {nome}
     38 {setorz}
     39 {sector}
     39 {setorx}
     39 {setory}
     44 {alvo}
     45 {dinheiro}
     58 {spaceport}
     59 {military_fuel}
     60 {}
     60 {FACTION}
     60 {POLICE}
     61 {entity}
     61 {problem}
     61 {reward}
     61 {star}
     61 {time}
     62 {bay}
     62 {dom_sectorx}
     62 {dom_sectory}
     62 {dom_sectorz}
     62 {dom_system}
     62 {grav}
     62 {pass}
     62 {shipid}
     62 {wage}
     66 {sistema}
     90 {group}
     90 {MILITARY}
     91 {cargotype}
     91 {commodity}
     91 {location}
     91 {quantity}
     91 {ship}
     92 {secondary_info}
     93 {crew}
    121 {clubname}
    121 {dom_starport}
    122 {mass}
    123 {f.0}
    123 {fee}
    123 {mission}
    124 {f.3}
    124 {lat}
    124 {long}
    148 {no}
    148 {radioactives}
    149 {newspaper}
    150 {proprietor}
    155 {f.2}
    155 {gravity}
    174 {yes}
    184 {drive}
    184 {todo}
    185 {f.1}
    186 {done}
    186 {lasttime}
    186 {targetname}
    217 {due}
    246 {primary_info}
    246 {shiplabel}
    269 {client}
    272 {cargo}
    274 {org}
    341 {unit}
    395 {systembody}
    401 {playerShipLabel}
    461 {planet}
    462 {equipment}
    523 {price}
    587 {station}
    615 {amount}
    620 {cargoname}
    954 {area}
    990 {locality}
   1237 {target}
   1242 {date}
   1550 {dist}
   1563 {starport}
   2054 {sectorx}
   2056 {sectory}
   2061 {sectorz}
   2715 {name}
   2943 {cash}
   4515 {system}
 173045 
impaktor commented 2 days ago

OK, there are 149 files that have errors lua-variable translation errors (I'll update this post when I have the C++ ones as well):

Files with errors ``` total files with errors: 149: data/lang/quitconfirmation-core/pt_BR.json data/lang/module-assassination/es.json data/lang/ui-core/bg.json data/lang/core/es.json data/lang/module-combat/ru.json data/lang/module-stationtrafficcontrol/sv.json data/lang/module-soldout/zh.json data/lang/module-searchrescue/zh.json data/lang/module-fuelclub/pt_BR.json data/lang/module-searchrescue/cs.json data/lang/module-searchrescue/tr.json data/lang/ui-core/ja.json data/lang/module-searchrescue/de.json data/lang/module-searchrescue/hu.json data/lang/module-breakdownservicing/sv.json data/lang/module-assassination/zh.json data/lang/module-deliverpackage/zh.json data/lang/module-system/ru.json data/lang/module-assassination/hu.json data/lang/core/ar.json data/lang/module-secondhand/tr.json data/lang/module-taxi/pt.json data/lang/module-assassination/ja_JP.json data/lang/module-combat/de.json data/lang/module-newseventcommodity/da.json data/lang/module-searchrescue/ru.json data/lang/module-cargorun/zh.json data/lang/module-assassination/ru.json data/lang/module-newseventcommodity/es.json data/lang/ui-core/ar.json data/lang/core/hu.json data/lang/core/sv.json data/lang/module-cargorun/ja.json data/lang/module-searchrescue/es.json data/lang/module-assassination/tr.json data/lang/module-breakdownservicing/ga.json data/lang/ui-core/pl.json data/lang/module-breakdownservicing/hu.json data/lang/module-searchrescue/gd.json data/lang/module-combat/hu.json data/lang/module-breakdownservicing/ja.json data/lang/module-breakdownservicing/de.json data/lang/module-searchrescue/pl.json data/lang/module-breakdownservicing/ja_JP.json data/lang/module-taxi/tr.json data/lang/module-scout/it.json data/lang/module-assassination/nl.json data/lang/module-searchrescue/sv.json data/lang/module-newseventcommodity/sv.json data/lang/ui-core/sv.json data/lang/module-cargorun/el.json data/lang/module-deliverpackage/pt_BR.json data/lang/module-combat/cs.json data/lang/module-deliverpackage/id.json data/lang/module-newseventcommodity/pt_BR.json data/lang/module-scout/hu.json data/lang/module-cargorun/ga.json data/lang/module-cargorun/ru.json data/lang/module-system/pl.json data/lang/module-assassination/ja.json data/lang/module-deliverpackage/pt.json data/lang/core/el.json data/lang/module-combat/pl.json data/lang/module-breakdownservicing/zh.json data/lang/module-combat/it.json data/lang/module-assassination/ga.json data/lang/module-scout/zh.json data/lang/module-scoop/tr.json data/lang/module-cargorun/de.json data/lang/module-taxi/pt_BR.json data/lang/module-stationrefuelling/hu.json data/lang/module-secondhand/hu.json data/lang/module-taxi/da.json data/lang/module-searchrescue/el.json data/lang/module-searchrescue/fr.json data/lang/quitconfirmation-core/de.json data/lang/ui-core/fr.json data/lang/module-newseventcommodity/zh.json data/lang/module-combat/tr.json data/lang/module-combat/zh.json data/lang/core/id.json data/lang/module-cargorun/tr.json data/lang/ui-core/gd.json data/lang/quitconfirmation-core/hu.json data/lang/module-scout/de.json data/lang/module-fuelclub/pl.json data/lang/module-scoop/de.json data/lang/ui-core/hu.json data/lang/module-soldout/cs.json data/lang/module-cargorun/es.json data/lang/module-stationtrafficcontrol/it.json data/lang/module-fuelclub/tr.json data/lang/module-stationtrafficcontrol/zh.json data/lang/module-cargorun/hu.json data/lang/module-newseventcommodity/it.json data/lang/module-combat/sv.json data/lang/module-scout/el.json data/lang/module-breakdownservicing/es.json data/lang/module-breakdownservicing/cs.json data/lang/module-system/cs.json data/lang/module-assassination/pt.json data/lang/ui-core/pt.json data/lang/module-assassination/de.json data/lang/module-deliverpackage/sv.json data/lang/ui-core/zh.json data/lang/module-soldout/hu.json data/lang/module-cargorun/ro.json data/lang/ui-core/tr.json data/lang/module-donatetocranks/tr.json data/lang/module-cargorun/pl.json data/lang/ui-core/ru.json data/lang/core/da.json data/lang/module-searchrescue/ga.json data/lang/quitconfirmation-core/pl.json data/lang/module-cargorun/it.json data/lang/module-combat/fr.json data/lang/module-combat/el.json data/lang/ui-core/da.json data/lang/module-assassination/ja-Hira.json data/lang/module-breakdownservicing/ja-Hira.json data/lang/module-cargorun/fr.json data/lang/module-fuelclub/ru.json data/lang/module-fuelclub/zh.json data/lang/ui-core/de.json data/lang/module-assassination/pt_BR.json data/lang/module-newseventcommodity/nl.json data/lang/ui-core/pt_BR.json data/lang/module-crewcontracts/hu.json data/lang/module-breakdownservicing/pt_BR.json data/lang/module-donatetocranks/hu.json data/lang/module-scout/tr.json data/lang/module-combat/nl.json data/lang/module-taxi/id.json data/lang/module-scoop/fr.json data/lang/module-newseventcommodity/fr.json data/lang/module-breakdownservicing/gd.json data/lang/module-searchrescue/bg.json data/lang/module-taxi/hu.json data/lang/module-donatetocranks/zh.json data/lang/module-cargorun/cs.json data/lang/quitconfirmation-core/zh.json data/lang/module-secondhand/de.json data/lang/module-deliverpackage/tr.json data/lang/module-newseventcommodity/ru.json data/lang/module-scoop/zh.json data/lang/ui-core/it.json data/lang/module-secondhand/fr.json data/lang/module-donatetocranks/el.json data/lang/module-newseventcommodity/cs.json ```
KEYS in files with error And for each of above files, this is what it barfed on (I've included english for each, thus every other line is the error, every other is the correct): ``` Checking file: data/lang/module-taxi/pt_BR.json FAIL: {'FLAVOUR_0_HOWMANY': ['group']} {'FLAVOUR_0_HOWMANY': ['grupo']} {'FLAVOUR_0_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_0_INTROTEXT': ['nome', 'sistema', 'setorx', 'setory', 'setorz', 'distância', 'dinheiro']} {'FLAVOUR_10_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_10_INTROTEXT': ['nome', 'sistema', 'setorx', 'setory', 'setorz', 'distância', 'dinheiro']} {'FLAVOUR_11_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_11_INTROTEXT': ['nome', 'sistema', 'setorx', 'setory', 'setorz', 'distância', 'dinheiro']} {'FLAVOUR_12_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_12_INTROTEXT': ['nome', 'sistema', 'setorx', 'setory', 'setorz', 'distância', 'dinheiro']} {'FLAVOUR_1_HOWMANY': ['group']} {'FLAVOUR_1_HOWMANY': ['grupo']} {'FLAVOUR_1_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_1_INTROTEXT': ['nome', 'sistema', 'setorx', 'setory', 'setorz', 'distância', 'dinheiro']} {'FLAVOUR_1_WHYSOMUCH': ['corp']} {'FLAVOUR_1_WHYSOMUCH': ['corporação']} {'FLAVOUR_2_HOWMANY': ['group']} {'FLAVOUR_2_HOWMANY': ['grupo']} {'FLAVOUR_2_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_2_INTROTEXT': ['nome', 'sistema', 'setorx', 'setory', 'Setorz', 'distância', 'dinheiro']} {'FLAVOUR_3_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_3_INTROTEXT': ['nome', 'sistema', 'setorx', 'setory', 'setorz', 'distância', 'dinheiro']} {'FLAVOUR_4_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_4_INTROTEXT': ['nome', 'sistema', 'setorx', 'setory', 'setorz', 'distância', 'dinheiro']} {'FLAVOUR_5_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_5_INTROTEXT': ['nome', 'sistema', 'setorx', 'setory', 'setorz', 'distância', 'dinheiro']} {'FLAVOUR_6_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_6_INTROTEXT': ['nome', 'sistema', 'setorx', 'setory', 'setorz', 'distância', 'dinheiro']} {'FLAVOUR_7_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_7_INTROTEXT': ['nome', 'sistema', 'setorx', 'setory', 'setorz', 'distância', 'dinheiro']} {'FLAVOUR_8_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_8_INTROTEXT': ['nome', 'sistema', 'setorx', 'setory', 'setorz', 'distância', 'dinheiro']} {'FLAVOUR_9_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_9_INTROTEXT': ['nome', 'sistema', 'setorx', 'setory', 'setorz', 'distância', 'dinheiro']} {'PIRATE_TAUNTS_0': ['client']} {'PIRATE_TAUNTS_0': ['cliente']} {'PIRATE_TAUNTS_1': ['client']} {'PIRATE_TAUNTS_1': ['cliente']} Checking file: data/lang/module-taxi/hu.json FAIL: {'FLAVOUR_10_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_10_INTROTEXT': ['name', 'system', 'dist', 'sectorx', 'sectory', 'sectorz', 'cash']} {'FLAVOUR_3_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_3_INTROTEXT': ['name', 'system', 'dist', 'sectorx', 'sectory', 'sectorz', 'cash']} {'FLAVOUR_8_ADTEXT': ['system']} {'FLAVOUR_8_ADTEXT': ['system', 'cash']} Checking file: data/lang/module-taxi/pt.json FAIL: {'FLAVOUR_10_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_10_INTROTEXT': ['nome', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'dinheiro']} {'FLAVOUR_12_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_12_INTROTEXT': ['nome', 'sistema', 'sectorx', 'sectory', 'sectorz', 'dist', 'dinheiro']} {'FLAVOUR_3_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_3_INTROTEXT': ['nome', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'dinheiro']} {'FLAVOUR_4_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_4_INTROTEXT': ['nome', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'dinheiro']} {'FLAVOUR_5_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_5_INTROTEXT': ['nome', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'dinheiro']} {'FLAVOUR_6_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_6_INTROTEXT': ['nome', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'dinheiro']} {'FLAVOUR_7_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_7_INTROTEXT': ['nome', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'dinheiro']} {'PIRATE_TAUNTS_0': ['client']} {'PIRATE_TAUNTS_0': ['cliente']} {'PIRATE_TAUNTS_1': ['client']} {'PIRATE_TAUNTS_1': ['cliente']} Checking file: data/lang/module-taxi/da.json FAIL: {'FLAVOUR_10_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_10_INTROTEXT': ['name', 'system', 'sectorX', 'sectorY', 'sectorZ', 'dist', 'cash']} {'FLAVOUR_11_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_11_INTROTEXT': ['name', 'system', 'sectorX', 'sectorY', 'sectorZ', 'dist', 'cash']} {'FLAVOUR_1_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_1_INTROTEXT': ['name', 'system', 'sectorX', 'sectorY', 'sectorZ', 'dist', 'cash']} {'FLAVOUR_8_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_8_INTROTEXT': ['name', 'system', 'sectorX', 'sectorY', 'sectorZ', 'dist', 'cash']} {'FLAVOUR_9_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_9_INTROTEXT': ['name', 'system', 'sectorX', 'sectorY', 'sectorZ', 'dist', 'cash']} Checking file: data/lang/module-taxi/id.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-taxi/tr.json FAIL: {'FLAVOUR_0_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_0_INTROTEXT': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'cash']} {'FLAVOUR_10_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_10_INTROTEXT': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'cash']} {'FLAVOUR_11_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_11_INTROTEXT': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'cash']} {'FLAVOUR_12_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_12_INTROTEXT': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'cash']} {'FLAVOUR_1_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_1_INTROTEXT': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'cash']} {'FLAVOUR_2_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_2_INTROTEXT': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'cash']} {'FLAVOUR_3_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_3_INTROTEXT': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'cash']} {'FLAVOUR_4_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_4_INTROTEXT': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'cash']} {'FLAVOUR_5_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_5_INTROTEXT': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'cash']} {'FLAVOUR_6_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_6_INTROTEXT': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'cash']} {'FLAVOUR_7_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_7_INTROTEXT': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'cash']} {'FLAVOUR_8_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_8_INTROTEXT': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'cash']} {'FLAVOUR_9_INTROTEXT': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'FLAVOUR_9_INTROTEXT': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'cash']} Checking file: data/lang/module-stationtrafficcontrol/it.json FAIL: {'YOU_ARE_LEAVING_STATION_SPACE_4': ['station', 'playerShipLabel']} {'YOU_ARE_LEAVING_STATION_SPACE_4': ['playerShipLabel', 'station']} Checking file: data/lang/module-stationtrafficcontrol/zh.json FAIL: {'YOU_ARE_LEAVING_STATION_SPACE_4': ['station', 'playerShipLabel']} {'YOU_ARE_LEAVING_STATION_SPACE_4': ['station', 'playershipbalel']} Checking file: data/lang/module-stationtrafficcontrol/sv.json FAIL: {'YOU_ARE_ENTERING_STATION_SPACE_3': ['playerShipLabel', 'station']} {'YOU_ARE_ENTERING_STATION_SPACE_3': ['playedrShipLabel', 'station']} Checking file: data/lang/module-assassination/pt_BR.json FAIL: {'FLAVOUR_0_FAILUREMSG': ['target']} {'FLAVOUR_0_FAILUREMSG': ['alvo']} {'FLAVOUR_0_FAILUREMSG2': ['target']} {'FLAVOUR_0_FAILUREMSG2': ['alvo']} {'FLAVOUR_0_INTROTEXT': ['name', 'cash', 'target']} {'FLAVOUR_0_INTROTEXT': ['nome', 'dinheiro', 'alvo']} {'FLAVOUR_0_SUCCESSMSG': ['target']} {'FLAVOUR_0_SUCCESSMSG': ['alvo']} {'FLAVOUR_1_FAILUREMSG': ['target']} {'FLAVOUR_1_FAILUREMSG': ['alvo']} {'FLAVOUR_1_FAILUREMSG2': ['target']} {'FLAVOUR_1_FAILUREMSG2': ['alvo']} {'FLAVOUR_1_INTROTEXT': ['target', 'cash']} {'FLAVOUR_1_INTROTEXT': ['alvo', 'dinheiro']} {'FLAVOUR_1_SUCCESSMSG': ['target']} {'FLAVOUR_1_SUCCESSMSG': ['alvo']} {'FLAVOUR_2_INTROTEXT': ['name', 'cash', 'target']} {'FLAVOUR_2_INTROTEXT': ['nome', 'dinheiro', 'alvo']} {'FLAVOUR_3_FAILUREMSG': ['target']} {'FLAVOUR_3_FAILUREMSG': ['alvo']} {'FLAVOUR_3_INTROTEXT': ['target', 'cash']} {'FLAVOUR_3_INTROTEXT': ['alvo', 'dinheiro']} {'FLAVOUR_3_SUCCESSMSG': ['target']} {'FLAVOUR_3_SUCCESSMSG': ['alvo']} {'FLAVOUR_4_FAILUREMSG': ['target']} {'FLAVOUR_4_FAILUREMSG': ['alvo']} {'FLAVOUR_4_FAILUREMSG2': ['target']} {'FLAVOUR_4_FAILUREMSG2': ['alvo']} {'FLAVOUR_4_INTROTEXT': ['cash', 'target']} {'FLAVOUR_4_INTROTEXT': ['dinheiro', 'alvo']} {'FLAVOUR_4_SUCCESSMSG': ['target']} {'FLAVOUR_4_SUCCESSMSG': ['alvo']} {'FLAVOUR_5_FAILUREMSG': ['target']} {'FLAVOUR_5_FAILUREMSG': ['alvo']} {'FLAVOUR_5_FAILUREMSG2': ['target']} {'FLAVOUR_5_FAILUREMSG2': ['alvo']} {'FLAVOUR_5_INTROTEXT': ['target', 'system', 'cash']} {'FLAVOUR_5_INTROTEXT': ['alvo', 'sistema', 'dinheiro']} {'FLAVOUR_5_SUCCESSMSG': ['target', 'cash']} {'FLAVOUR_5_SUCCESSMSG': ['alvo', 'dinheiro']} {'IT_MUST_BE_DONE_AFTER': ['target', 'spaceport']} {'IT_MUST_BE_DONE_AFTER': ['alvo', 'base de lançamento']} {'WHERE_CAN_I_FIND_X': ['target']} {'WHERE_CAN_I_FIND_X': ['alvo']} {'X_WILL_BE_LEAVING': ['target', 'spaceport', 'system', 'sectorX', 'sectorY', 'sectorZ', 'dist', 'date', 'shipname', 'shipregid']} {'X_WILL_BE_LEAVING': ['alvo', 'base de lançamento', 'sistema', 'setorx', 'setory', 'setorz', 'distância', 'data', 'nome da nave', 'registro da nave']} Checking file: data/lang/module-assassination/ja-Hira.json FAIL: {'FLAVOUR_0_ADTEXT': ['target', 'system']} {'FLAVOUR_0_ADTEXT': ['system', 'target']} {'FLAVOUR_0_INTROTEXT': ['name', 'cash', 'target']} {'FLAVOUR_0_INTROTEXT': ['name', 'target', 'cash']} {'FLAVOUR_1_ADTEXT': ['target', 'system']} {'FLAVOUR_1_ADTEXT': ['system', 'target']} {'FLAVOUR_2_INTROTEXT': ['name', 'cash', 'target']} {'FLAVOUR_2_INTROTEXT': ['name', 'target', 'cash']} {'FLAVOUR_5_INTROTEXT': ['target', 'system', 'cash']} {'FLAVOUR_5_INTROTEXT': ['cash', 'target', 'system']} {'X_WILL_BE_LEAVING': ['target', 'spaceport', 'system', 'sectorX', 'sectorY', 'sectorZ', 'dist', 'date', 'shipname', 'shipregid']} {'X_WILL_BE_LEAVING': ['target', 'system', 'sectorX', 'sectorY', 'sectorZ', 'dist', 'spaceport', 'date', 'shipname', 'shipregid']} Checking file: data/lang/module-assassination/hu.json FAIL: {'FLAVOUR_1_ADTEXT': ['target', 'system']} {'FLAVOUR_1_ADTEXT': ['system', 'target']} {'X_WILL_BE_LEAVING': ['target', 'spaceport', 'system', 'sectorX', 'sectorY', 'sectorZ', 'dist', 'date', 'shipname', 'shipregid']} {'X_WILL_BE_LEAVING': ['target', 'date', 'system', 'spaceport', 'sectorX', 'sectorY', 'sectorZ', 'shipname', 'shipregid']} Checking file: data/lang/module-assassination/de.json FAIL: {'X_WILL_BE_LEAVING': ['target', 'spaceport', 'system', 'sectorX', 'sectorY', 'sectorZ', 'dist', 'date', 'shipname', 'shipregid']} {'X_WILL_BE_LEAVING': ['target', 'spaceport', 'system', 'sectorX', 'sectorY', 'sectorZ', 'date', 'shipname', 'shipregid']} Checking file: data/lang/module-assassination/pt.json FAIL: {'FLAVOUR_0_FAILUREMSG': ['target']} {'FLAVOUR_0_FAILUREMSG': ['alvo']} {'FLAVOUR_0_FAILUREMSG2': ['target']} {'FLAVOUR_0_FAILUREMSG2': ['alvo']} {'FLAVOUR_0_INTROTEXT': ['name', 'cash', 'target']} {'FLAVOUR_0_INTROTEXT': ['nome', 'dinheiro', 'alvo']} {'FLAVOUR_0_SUCCESSMSG': ['target']} {'FLAVOUR_0_SUCCESSMSG': ['alvo']} {'FLAVOUR_1_FAILUREMSG': ['target']} {'FLAVOUR_1_FAILUREMSG': ['alvo']} {'FLAVOUR_1_FAILUREMSG2': ['target']} {'FLAVOUR_1_FAILUREMSG2': ['alvo']} {'FLAVOUR_1_INTROTEXT': ['target', 'cash']} {'FLAVOUR_1_INTROTEXT': ['alvo', 'dinheiro']} {'FLAVOUR_1_SUCCESSMSG': ['target']} {'FLAVOUR_1_SUCCESSMSG': ['alvo']} {'FLAVOUR_2_INTROTEXT': ['name', 'cash', 'target']} {'FLAVOUR_2_INTROTEXT': ['nome', 'dinheiro', 'alvo']} {'FLAVOUR_3_INTROTEXT': ['target', 'cash']} {'FLAVOUR_3_INTROTEXT': ['alvo', 'dinheiro']} {'FLAVOUR_3_SUCCESSMSG': ['target']} {'FLAVOUR_3_SUCCESSMSG': ['alvo']} {'FLAVOUR_4_FAILUREMSG': ['target']} {'FLAVOUR_4_FAILUREMSG': ['alvo']} {'FLAVOUR_4_FAILUREMSG2': ['target']} {'FLAVOUR_4_FAILUREMSG2': ['alvo']} {'FLAVOUR_4_INTROTEXT': ['cash', 'target']} {'FLAVOUR_4_INTROTEXT': ['dinheiro', 'alvo']} {'FLAVOUR_4_SUCCESSMSG': ['target']} {'FLAVOUR_4_SUCCESSMSG': ['alvo']} {'FLAVOUR_5_FAILUREMSG': ['target']} {'FLAVOUR_5_FAILUREMSG': ['alvo']} {'FLAVOUR_5_INTROTEXT': ['target', 'system', 'cash']} {'FLAVOUR_5_INTROTEXT': ['alvo', 'sistema', 'dinheiro']} {'FLAVOUR_5_SUCCESSMSG': ['target', 'cash']} {'FLAVOUR_5_SUCCESSMSG': ['alvo', 'dinheiro']} {'IT_MUST_BE_DONE_AFTER': ['target', 'spaceport']} {'IT_MUST_BE_DONE_AFTER': ['alvo', 'base de lançamento']} {'WHERE_CAN_I_FIND_X': ['target']} {'WHERE_CAN_I_FIND_X': ['alvo']} {'X_WILL_BE_LEAVING': ['target', 'spaceport', 'system', 'sectorX', 'sectorY', 'sectorZ', 'dist', 'date', 'shipname', 'shipregid']} {'X_WILL_BE_LEAVING': ['alvo', 'base de lançamento', 'sistema', 'setorx', 'setory', 'setorz', 'distância', 'data', 'nome da nave', 'registro da nave']} Checking file: data/lang/module-assassination/zh.json FAIL: {'FLAVOUR_0_ADTEXT': ['target', 'system']} {'FLAVOUR_0_ADTEXT': ['system', 'target']} {'FLAVOUR_0_INTROTEXT': ['name', 'cash', 'target']} {'FLAVOUR_0_INTROTEXT': ['name', 'target', 'cash']} {'FLAVOUR_1_ADTEXT': ['target', 'system']} {'FLAVOUR_1_ADTEXT': ['system', 'target']} {'X_WILL_BE_LEAVING': ['target', 'spaceport', 'system', 'sectorX', 'sectorY', 'sectorZ', 'dist', 'date', 'shipname', 'shipregid']} {'X_WILL_BE_LEAVING': ['target', 'date', 'system', 'sectorX', 'sectorY', 'sectorZ', 'spaceport', 'shipname', 'shipregid']} Checking file: data/lang/module-assassination/ja_JP.json FAIL: {'FLAVOUR_0_ADTEXT': ['target', 'system']} {'FLAVOUR_0_ADTEXT': ['system', 'target']} {'FLAVOUR_0_INTROTEXT': ['name', 'cash', 'target']} {'FLAVOUR_0_INTROTEXT': ['name', 'target', 'cash']} {'FLAVOUR_1_ADTEXT': ['target', 'system']} {'FLAVOUR_1_ADTEXT': ['system', 'target']} {'FLAVOUR_2_INTROTEXT': ['name', 'cash', 'target']} {'FLAVOUR_2_INTROTEXT': ['name', 'target', 'cash']} {'FLAVOUR_5_INTROTEXT': ['target', 'system', 'cash']} {'FLAVOUR_5_INTROTEXT': ['cash', 'target', 'system']} {'X_WILL_BE_LEAVING': ['target', 'spaceport', 'system', 'sectorX', 'sectorY', 'sectorZ', 'dist', 'date', 'shipname', 'shipregid']} {'X_WILL_BE_LEAVING': ['target', 'system', 'sectorX', 'sectorY', 'sectorZ', 'dist', 'spaceport', 'date', 'shipname', 'shipregid']} Checking file: data/lang/module-assassination/ga.json FAIL: {'FLAVOUR_4_INTROTEXT': ['cash', 'target']} {'FLAVOUR_4_INTROTEXT': ['target', 'cash']} Checking file: data/lang/module-assassination/tr.json FAIL: {'FLAVOUR_0_ADTEXT': ['target', 'system']} {'FLAVOUR_0_ADTEXT': ['system', 'target']} {'FLAVOUR_0_INTROTEXT': ['name', 'cash', 'target']} {'FLAVOUR_0_INTROTEXT': ['name', 'target', 'cash']} {'FLAVOUR_1_ADTEXT': ['target', 'system']} {'FLAVOUR_1_ADTEXT': ['system', 'target']} {'FLAVOUR_2_INTROTEXT': ['name', 'cash', 'target']} {'FLAVOUR_2_INTROTEXT': ['name', 'target', 'cash']} {'FLAVOUR_5_INTROTEXT': ['target', 'system', 'cash']} {'FLAVOUR_5_INTROTEXT': ['system', 'target', 'cash']} {'X_WILL_BE_LEAVING': ['target', 'spaceport', 'system', 'sectorX', 'sectorY', 'sectorZ', 'dist', 'date', 'shipname', 'shipregid']} {'X_WILL_BE_LEAVING': ['dist', 'system', 'sectorX', 'sectorY', 'sectorZ', 'spaceport', 'date', 'shipname', 'shipregid']} Checking file: data/lang/module-assassination/ja.json FAIL: {'FLAVOUR_0_ADTEXT': ['target', 'system']} {'FLAVOUR_0_ADTEXT': ['system', 'target']} {'FLAVOUR_0_INTROTEXT': ['name', 'cash', 'target']} {'FLAVOUR_0_INTROTEXT': ['name', 'target', 'cash']} {'FLAVOUR_1_ADTEXT': ['target', 'system']} {'FLAVOUR_1_ADTEXT': ['system', 'target']} {'FLAVOUR_2_INTROTEXT': ['name', 'cash', 'target']} {'FLAVOUR_2_INTROTEXT': ['name', 'target', 'cash']} {'FLAVOUR_5_INTROTEXT': ['target', 'system', 'cash']} {'FLAVOUR_5_INTROTEXT': ['cash', 'target', 'system']} {'X_WILL_BE_LEAVING': ['target', 'spaceport', 'system', 'sectorX', 'sectorY', 'sectorZ', 'dist', 'date', 'shipname', 'shipregid']} {'X_WILL_BE_LEAVING': ['target', 'system', 'sectorX', 'sectorY', 'sectorZ', 'dist', 'spaceport', 'date', 'shipname', 'shipregid']} Checking file: data/lang/module-assassination/nl.json FAIL: {'FLAVOUR_0_FAILUREMSG': ['target']} {'FLAVOUR_0_FAILUREMSG': ['doelwit']} {'FLAVOUR_0_FAILUREMSG2': ['target']} {'FLAVOUR_0_FAILUREMSG2': ['doelwit']} {'FLAVOUR_0_INTROTEXT': ['name', 'cash', 'target']} {'FLAVOUR_0_INTROTEXT': ['naam', 'geld', 'doelwit']} {'FLAVOUR_1_FAILUREMSG': ['target']} {'FLAVOUR_1_FAILUREMSG': ['doelwit']} {'FLAVOUR_1_INTROTEXT': ['target', 'cash']} {'FLAVOUR_1_INTROTEXT': ['doelwit', 'geld']} {'FLAVOUR_1_SUCCESSMSG': ['target']} {'FLAVOUR_1_SUCCESSMSG': ['doelwit']} {'FLAVOUR_2_INTROTEXT': ['name', 'cash', 'target']} {'FLAVOUR_2_INTROTEXT': ['naam', 'geld', 'doelwit']} {'FLAVOUR_3_FAILUREMSG': ['target']} {'FLAVOUR_3_FAILUREMSG': ['doelwit']} {'FLAVOUR_3_INTROTEXT': ['target', 'cash']} {'FLAVOUR_3_INTROTEXT': ['doelwit', 'geld']} {'FLAVOUR_3_SUCCESSMSG': ['target']} {'FLAVOUR_3_SUCCESSMSG': ['doelwit']} {'FLAVOUR_4_FAILUREMSG': ['target']} {'FLAVOUR_4_FAILUREMSG': ['doelwit']} {'FLAVOUR_4_INTROTEXT': ['cash', 'target']} {'FLAVOUR_4_INTROTEXT': ['geld', 'doelwit']} {'FLAVOUR_5_SUCCESSMSG': ['target', 'cash']} {'FLAVOUR_5_SUCCESSMSG': ['doelwit', 'geld']} Checking file: data/lang/module-assassination/es.json FAIL: {'X_WILL_BE_LEAVING': ['target', 'spaceport', 'system', 'sectorX', 'sectorY', 'sectorZ', 'dist', 'date', 'shipname', 'shipregid']} {'X_WILL_BE_LEAVING': ['target', 'spaceport', 'system', 'sectorX', 'sectorY', 'sectorZ', 'date', 'shipname', 'shipregid']} Checking file: data/lang/module-assassination/ru.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-donatetocranks/hu.json FAIL: {'FLAVOUR_7_MESSAGE': ['POLICE', 'SYSTEM']} {'FLAVOUR_7_MESSAGE': ['POLICE', 'system']} Checking file: data/lang/module-donatetocranks/zh.json FAIL: {'FLAVOUR_7_MESSAGE': ['POLICE', 'SYSTEM']} {'FLAVOUR_7_MESSAGE': ['SYSTEM', 'POLICE']} {'SALES_PITCH': ['cash']} {'SALES_PITCH': ['现金']} Checking file: data/lang/module-donatetocranks/el.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-donatetocranks/tr.json FAIL: {'FLAVOUR_7_MESSAGE': ['POLICE', 'SYSTEM']} {'FLAVOUR_7_MESSAGE': ['SYSTEM', 'POLICE']} Checking file: data/lang/core/ar.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/core/hu.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/core/da.json FAIL: {'STABLE_SYSTEM_WITH_N_MAJOR_BODIES_STARPORTS': ['body(s)', 'starport(s)']} {'STABLE_SYSTEM_WITH_N_MAJOR_BODIES_STARPORTS': ['body(r)', 'starport(e)']} Checking file: data/lang/core/el.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/core/id.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/core/sv.json FAIL: {'PRESSURE_N_ATMOSPHERES': ['f.2']} {'PRESSURE_N_ATMOSPHERES': ['f-2']} Checking file: data/lang/core/es.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-secondhand/hu.json FAIL: {'FLAVOUR_1_BODY': ['name', 'equipment', 'price']} {'FLAVOUR_1_BODY': ['equipment', 'price']} Checking file: data/lang/module-secondhand/fr.json FAIL: {'FLAVOUR_0_BODY': ['name', 'equipment', 'price']} {'FLAVOUR_0_BODY': ['name', 'equipment']} {'FLAVOUR_0_TEXT': ['equipment']} {'FLAVOUR_0_TEXT': ['equipement']} Checking file: data/lang/module-secondhand/de.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-secondhand/tr.json FAIL: {'FLAVOUR_1_BODY': ['name', 'equipment', 'price']} {'FLAVOUR_1_BODY': ['name', 'price', 'equipment']} {'FLAVOUR_2_BODY': ['name', 'equipment', 'price']} {'FLAVOUR_2_BODY': ['name', 'price', 'equipment']} {'FLAVOUR_4_BODY': ['equipment', 'price']} {'FLAVOUR_4_BODY': ['price', 'equipment']} Checking file: data/lang/module-fuelclub/pt_BR.json FAIL: {'FLAVOUR_0_NONMEMBER_INTRO': ['clubname']} {'FLAVOUR_0_NONMEMBER_INTRO': ['nome do clube']} {'FLAVOUR_0_WELCOME': ['clubname']} {'FLAVOUR_0_WELCOME': ['nome do clube']} {'LIST_BENEFITS_DISPOSAL': ['radioactives']} {'LIST_BENEFITS_DISPOSAL': ['radioativos']} {'LIST_BENEFITS_FUEL': ['fuel']} {'LIST_BENEFITS_FUEL': ['combustível']} {'LIST_BENEFITS_JOIN': ['membership_fee']} {'LIST_BENEFITS_JOIN': ['taxa_anuidade']} {'WE_WILL_ONLY_DISPOSE_OF': ['radioactives', 'military_fuel']} {'WE_WILL_ONLY_DISPOSE_OF': ['radioativos', 'combustível_militar']} {'WHAT_CONDITIONS_APPLY': ['radioactives']} {'WHAT_CONDITIONS_APPLY': ['radioativos']} {'YOU_ARE_NOW_A_MEMBER': ['expiry_date']} {'YOU_ARE_NOW_A_MEMBER': ['data_vencimento']} {'YOU_MUST_BUY': ['military_fuel', 'radioactives']} {'YOU_MUST_BUY': ['combustível_militar', 'radioativos']} Checking file: data/lang/module-fuelclub/pl.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-fuelclub/zh.json FAIL: {'WE_WILL_ONLY_DISPOSE_OF': ['radioactives', 'military_fuel']} {'WE_WILL_ONLY_DISPOSE_OF': ['military_fuel', 'radioactives']} {'YOU_MUST_BUY': ['military_fuel', 'radioactives']} {'YOU_MUST_BUY': ['radioactives', 'military_fuel']} Checking file: data/lang/module-fuelclub/tr.json FAIL: {'WE_WILL_ONLY_DISPOSE_OF': ['radioactives', 'military_fuel']} {'WE_WILL_ONLY_DISPOSE_OF': ['military_fuel', 'radioactives']} {'YOU_MUST_BUY': ['military_fuel', 'radioactives']} {'YOU_MUST_BUY': ['radioactives', 'military_fuel']} Checking file: data/lang/module-fuelclub/ru.json FAIL: {'YOU_MUST_BUY': ['military_fuel', 'radioactives']} {'YOU_MUST_BUY': ['radioactives', 'military_fuel']} Checking file: data/lang/module-breakdownservicing/pt_BR.json FAIL: {'FLAVOUR_0_TITLE': ['name']} {'FLAVOUR_0_TITLE': ['nome']} {'FLAVOUR_1_TITLE': ['proprietor']} {'FLAVOUR_1_TITLE': ['proprietário']} {'FLAVOUR_2_TITLE': ['proprietor']} {'FLAVOUR_2_TITLE': ['proprietário']} {'FLAVOUR_3_TITLE': ['name']} {'FLAVOUR_3_TITLE': ['nome']} {'FLAVOUR_5_TITLE': ['proprietor']} {'FLAVOUR_5_TITLE': ['proprietário']} {'YOUR_DRIVE_HAS_NOT_BEEN_SERVICED': ['date']} {'YOUR_DRIVE_HAS_NOT_BEEN_SERVICED': ['data']} {'YOUR_DRIVE_WAS_LAST_SERVICED_ON': ['date', 'company']} {'YOUR_DRIVE_WAS_LAST_SERVICED_ON': ['data', 'companhia']} Checking file: data/lang/module-breakdownservicing/gd.json FAIL: {'YOUR_DRIVE_WAS_LAST_SERVICED_ON': ['date', 'company']} {'YOUR_DRIVE_WAS_LAST_SERVICED_ON': ['company', 'date']} Checking file: data/lang/module-breakdownservicing/ja-Hira.json FAIL: {'FLAVOUR_3_PRICE': ['lasttime', 'drive', 'price']} {'FLAVOUR_3_PRICE': ['lasttime', 'price', 'drive']} Checking file: data/lang/module-breakdownservicing/hu.json FAIL: {'FLAVOUR_3_PRICE': ['lasttime', 'drive', 'price']} {'FLAVOUR_3_PRICE': ['lasttime', 'price', 'drive']} Checking file: data/lang/module-breakdownservicing/de.json FAIL: {'FLAVOUR_1_PRICE': ['drive', 'price', 'lasttime']} {'FLAVOUR_1_PRICE': ['price', 'lasttime']} {'FLAVOUR_3_PRICE': ['lasttime', 'drive', 'price']} {'FLAVOUR_3_PRICE': ['lasttime', 'price']} {'FLAVOUR_5_TITLE': ['proprietor']} {'FLAVOUR_5_TITLE': ['name']} Checking file: data/lang/module-breakdownservicing/zh.json FAIL: {'YOUR_DRIVE_WAS_LAST_SERVICED_ON': ['date', 'company']} {'YOUR_DRIVE_WAS_LAST_SERVICED_ON': ['company', 'date']} Checking file: data/lang/module-breakdownservicing/ja_JP.json FAIL: {'FLAVOUR_3_PRICE': ['lasttime', 'drive', 'price']} {'FLAVOUR_3_PRICE': ['lasttime', 'price', 'drive']} Checking file: data/lang/module-breakdownservicing/ga.json FAIL: {'FLAVOUR_1_PRICE': ['drive', 'price', 'lasttime']} {'FLAVOUR_1_PRICE': ['price', 'drive', 'lasttime']} {'YOUR_DRIVE_WAS_LAST_SERVICED_ON': ['date', 'company']} {'YOUR_DRIVE_WAS_LAST_SERVICED_ON': ['company', 'date']} Checking file: data/lang/module-breakdownservicing/ja.json FAIL: {'FLAVOUR_3_PRICE': ['lasttime', 'drive', 'price']} {'FLAVOUR_3_PRICE': ['lasttime', 'price', 'drive']} {'YOUR_DRIVE_WAS_LAST_SERVICED_ON': ['date', 'company']} {'YOUR_DRIVE_WAS_LAST_SERVICED_ON': ['company', 'date']} Checking file: data/lang/module-breakdownservicing/sv.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-breakdownservicing/cs.json FAIL: {'FLAVOUR_5_TITLE': ['proprietor']} {'FLAVOUR_5_TITLE': ['name']} Checking file: data/lang/module-breakdownservicing/es.json FAIL: {'FLAVOUR_2_INTRO': ['proprietor']} {'FLAVOUR_2_INTRO': ['propietor']} Checking file: data/lang/module-stationrefuelling/hu.json FAIL: {'THIS_IS_STATION_YOU_DO_NOT_HAVE_ENOUGH_LANDING': ['station', 'fee']} {'THIS_IS_STATION_YOU_DO_NOT_HAVE_ENOUGH_LANDING': ['station']} Checking file: data/lang/module-scout/hu.json FAIL: {'ADTEXT_1_INTRO': ['name', 'systembody', 'system', 'dist', 'cash']} {'ADTEXT_1_INTRO': ['name', 'system', 'systembody', 'dist', 'cash']} {'ADTEXT_2_INTRO': ['name', 'cash', 'systembody', 'system', 'dist']} {'ADTEXT_2_INTRO': ['name', 'cash', 'dist', 'system', 'systembody']} {'ADTEXT_3_INTRO': ['name', 'cash', 'systembody', 'system', 'dist']} {'ADTEXT_3_INTRO': ['name', 'cash', 'dist', 'system', 'systembody']} {'ADTEXT_4_INTRO': ['name', 'system', 'dist', 'systembody', 'cash']} {'ADTEXT_4_INTRO': ['name', 'dist', 'system', 'systembody', 'cash']} {'ADTEXT_9': ['systembody', 'system']} {'ADTEXT_9': ['system', 'systembody']} {'ADTEXT_9_INTRO': ['name', 'systembody', 'system', 'cash']} {'ADTEXT_9_INTRO': ['name', 'systembody', 'system']} {'SCAN_DETAILS': ['type', 'body', 'coverage', 'resolution']} {'SCAN_DETAILS': ['body', 'type', 'coverage', 'resolution']} Checking file: data/lang/module-scout/it.json FAIL: {'ADTEXT_9_INTRO': ['name', 'systembody', 'system', 'cash']} {'ADTEXT_9_INTRO': ['name', 'systembody', 'system', 'cache']} Checking file: data/lang/module-scout/de.json FAIL: {'ADTEXT_9_INTRO': ['name', 'systembody', 'system', 'cash']} {'ADTEXT_9_INTRO': ['name', 'systembody', 'system', 'systembody', 'cash']} {'DROP_OFF_DATA': ['location', 'date']} {'DROP_OFF_DATA': ['date', 'location']} Checking file: data/lang/module-scout/zh.json FAIL: {'ADTEXT_1_INTRO': ['name', 'systembody', 'system', 'dist', 'cash']} {'ADTEXT_1_INTRO': ['name', 'system', 'systembody', 'dist', 'cash']} {'ADTEXT_2_INTRO': ['name', 'cash', 'systembody', 'system', 'dist']} {'ADTEXT_2_INTRO': ['name', 'cash', 'system', 'systembody', 'dist']} {'ADTEXT_3_INTRO': ['name', 'cash', 'systembody', 'system', 'dist']} {'ADTEXT_3_INTRO': ['name', 'cash', 'system', 'systembody', 'dist']} {'ADTEXT_5_INTRO': ['name', 'cash', 'systembody', 'system', 'dist']} {'ADTEXT_5_INTRO': ['name', 'cash', 'system', 'dist', 'systembody']} {'ADTEXT_7_INTRO': ['name', 'cash', 'systembody']} {'ADTEXT_7_INTRO': ['name', 'systembody', 'cash']} {'ADTEXT_9': ['systembody', 'system']} {'ADTEXT_9': ['system', 'systembody']} {'ADTEXT_9_INTRO': ['name', 'systembody', 'system', 'cash']} {'ADTEXT_9_INTRO': ['name', 'system', 'systembody', 'cash']} {'DROP_OFF_DATA': ['location', 'date']} {'DROP_OFF_DATA': ['date', 'location']} {'SCAN_DETAILS': ['type', 'body', 'coverage', 'resolution']} {'SCAN_DETAILS': ['body', 'type', 'coverage', 'resolution']} Checking file: data/lang/module-scout/el.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-scout/tr.json FAIL: {'ADTEXT_1_INTRO': ['name', 'systembody', 'system', 'dist', 'cash']} {'ADTEXT_1_INTRO': ['name', 'dist', 'system', 'systembody', 'cash']} {'ADTEXT_2_INTRO': ['name', 'cash', 'systembody', 'system', 'dist']} {'ADTEXT_2_INTRO': ['name', 'dist', 'system', 'systembody', 'cash']} {'ADTEXT_3_INTRO': ['name', 'cash', 'systembody', 'system', 'dist']} {'ADTEXT_3_INTRO': ['name', 'dist', 'system', 'systembody', 'cash']} {'ADTEXT_5_INTRO': ['name', 'cash', 'systembody', 'system', 'dist']} {'ADTEXT_5_INTRO': ['name', 'dist', 'system', 'systembody', 'cash']} {'ADTEXT_6_INTRO': ['name', 'system', 'cash', 'systembody']} {'ADTEXT_6_INTRO': ['name', 'system', 'systembody', 'cash']} {'ADTEXT_7_INTRO': ['name', 'cash', 'systembody']} {'ADTEXT_7_INTRO': ['name', 'systembody', 'cash']} {'ADTEXT_9': ['systembody', 'system']} {'ADTEXT_9': ['system', 'systembody']} {'ADTEXT_9_INTRO': ['name', 'systembody', 'system', 'cash']} {'ADTEXT_9_INTRO': ['name', 'system', 'systembody', 'cash']} {'DROP_OFF_DATA': ['location', 'date']} {'DROP_OFF_DATA': ['date', 'location']} {'SCAN_DETAILS': ['type', 'body', 'coverage', 'resolution']} {'SCAN_DETAILS': ['body', 'type', 'coverage', 'resolution']} Checking file: data/lang/module-scoop/fr.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-scoop/de.json FAIL: {'INTROTEXT_RESCUE': ['client', 'cash', 'planet']} {'INTROTEXT_RESCUE': ['client', 'planet', 'cash']} Checking file: data/lang/module-scoop/zh.json FAIL: {'INTROTEXT_ARMS_DEALER': ['client', 'planet', 'shipid', 'star', 'cash']} {'INTROTEXT_ARMS_DEALER': ['client', '星球', 'star', 'shipid', 'cash']} {'INTROTEXT_LEGAL_GOODS': ['client', 'planet', 'cash']} {'INTROTEXT_LEGAL_GOODS': ['client', 'planet']} {'SHIP_DESTROYED': ['shipid', 'station']} {'SHIP_DESTROYED': ['shipid']} Checking file: data/lang/module-scoop/tr.json FAIL: {'INTROTEXT_ARMS_DEALER': ['client', 'planet', 'shipid', 'star', 'cash']} {'INTROTEXT_ARMS_DEALER': ['client', 'planet', 'star', 'shipid', 'cash']} Checking file: data/lang/ui-core/pt_BR.json FAIL: {'CABIN_FREE': ['amount']} {'CABIN_FREE': ['quantia']} {'CABIN_USED': ['amount']} {'CABIN_USED': ['quantia']} {'CARGO_T_FREE': ['amount']} {'CARGO_T_FREE': ['quantia']} {'CARGO_T_USED': ['amount']} {'CARGO_T_USED': ['quantia']} {'CASH_N': ['money']} {'CASH_N': ['dinheiro']} {'HULL_REPAIRED_BY_NAME_NOW_AT_N_PERCENT': ['name', 'repairPercent']} {'HULL_REPAIRED_BY_NAME_NOW_AT_N_PERCENT': ['nome', 'Percentualreparo']} {'NOT_SUPPORTED_ON_THIS_SHIP': ['equipment']} {'NOT_SUPPORTED_ON_THIS_SHIP': ['equipamento']} {'N_UNOCCUPIED_PASSENGER_CABINS': ['quantity']} {'N_UNOCCUPIED_PASSENGER_CABINS': ['quantidade']} {'PAY_FINE_OF_N': ['amount']} {'PAY_FINE_OF_N': ['quantia']} {'PILOT_SEAT_IS_NOW_OCCUPIED_BY_NAME': ['name']} {'PILOT_SEAT_IS_NOW_OCCUPIED_BY_NAME': ['nome']} {'REPAIR_X_HULL_DAMAGE_FOR_X': ['damage', 'price']} {'REPAIR_X_HULL_DAMAGE_FOR_X': ['dano', 'preço']} {'YOUR_HULL_IS_AT_X_INTEGRITY': ['value']} {'YOUR_HULL_IS_AT_X_INTEGRITY': ['valor']} Checking file: data/lang/ui-core/gd.json FAIL: {'STATION_ORBIT': ['orbit_period', 'parent_body']} {'STATION_ORBIT': ['parent_body', 'orbit_period']} Checking file: data/lang/ui-core/ar.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/ui-core/hu.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/ui-core/fr.json FAIL: {'TRADING_FROM': ['system']} {'TRADING_FROM': ['système']} {'TRADING_TO': ['system']} {'TRADING_TO': ['système']} Checking file: data/lang/ui-core/it.json FAIL: {'STATION_ORBIT': ['orbit_period', 'parent_body']} {'STATION_ORBIT': ['parent_body', 'orbit_peiod']} Checking file: data/lang/ui-core/de.json FAIL: {'STATION_ORBIT': ['orbit_period', 'parent_body']} {'STATION_ORBIT': ['parent_body', 'orbit_period']} Checking file: data/lang/ui-core/pt.json FAIL: {'N_LIGHT_YEARS_N_MAX': ['range', 'maxRange']} {'N_LIGHT_YEARS_N_MAX': ['alcance', 'Alcancemáximo']} {'N_OCCUPIED_PASSENGER_CABINS': ['quantity']} {'N_OCCUPIED_PASSENGER_CABINS': ['quantidade']} Checking file: data/lang/ui-core/da.json FAIL: {'NOT_ENOUGH_ALLOY_TO_ATTEMPT_A_REPAIR': ['alloy']} {'NOT_ENOUGH_ALLOY_TO_ATTEMPT_A_REPAIR': ['metallegering']} Checking file: data/lang/ui-core/pl.json FAIL: {'FLIGHTLOG_LANDED': ['primary_info', 'secondary_info', 'tertiary_info']} {'FLIGHTLOG_LANDED': ['primary_info', '{secondary_info']} Checking file: data/lang/ui-core/zh.json FAIL: {'FLIGHTLOG_LANDED': ['primary_info', 'secondary_info', 'tertiary_info']} {'FLIGHTLOG_LANDED': ['primary', 'secondary_info', 'tertiary_info']} {'HUD_HYPERSPACING_TO_N_IN_N_SECONDS': ['destination', 'countdown']} {'HUD_HYPERSPACING_TO_N_IN_N_SECONDS': ['countdown', 'destination']} {'LOCATED_N_KM_FROM_THE_CENTRE_OF_NAME': ['distance', 'name']} {'LOCATED_N_KM_FROM_THE_CENTRE_OF_NAME': ['name', 'distance']} {'REPAIR_X_HULL_DAMAGE_FOR_X': ['damage', 'price']} {'REPAIR_X_HULL_DAMAGE_FOR_X': ['price', 'damage']} Checking file: data/lang/ui-core/tr.json FAIL: {'FLIGHTLOG_STARPORT_ORBITAL': ['primary_info', 'secondary_info']} {'FLIGHTLOG_STARPORT_ORBITAL': ['secondary_info', 'primary_info']} {'FLIGHTLOG_STARPORT_SURFACE': ['primary_info', 'secondary_info']} {'FLIGHTLOG_STARPORT_SURFACE': ['secondary_info', 'primary_info']} {'HUD_HYPERSPACING_TO_N_IN_N_SECONDS': ['destination', 'countdown']} {'HUD_HYPERSPACING_TO_N_IN_N_SECONDS': ['countdown', 'destination']} {'LOCATED_N_KM_FROM_THE_CENTRE_OF_NAME': ['distance', 'name']} {'LOCATED_N_KM_FROM_THE_CENTRE_OF_NAME': ['name', 'distance']} {'MARKET_BUYLINE': ['amount', 'price']} {'MARKET_BUYLINE': ['price', 'amount']} {'MARKET_SELLINE': ['amount', 'price']} {'MARKET_SELLINE': ['price', 'amount']} {'STATION_ORBIT': ['orbit_period', 'parent_body']} {'STATION_ORBIT': ['parent_body', 'orbit_period']} {'THIS_IS_FACTION_POLICE': ['faction_police', 'faction']} {'THIS_IS_FACTION_POLICE': ['faction', 'faction_police']} Checking file: data/lang/ui-core/bg.json FAIL: {'HULL_REPAIRED_BY_NAME_NOW_AT_N_PERCENT': ['name', 'repairPercent']} {'HULL_REPAIRED_BY_NAME_NOW_AT_N_PERCENT': ['repairPercent', 'name']} Checking file: data/lang/ui-core/ja.json FAIL: {'FLIGHTLOG_STARPORT_ORBITAL': ['primary_info', 'secondary_info']} {'FLIGHTLOG_STARPORT_ORBITAL': ['secondary_info', 'primary_info']} {'FLIGHTLOG_STARPORT_SURFACE': ['primary_info', 'secondary_info']} {'FLIGHTLOG_STARPORT_SURFACE': ['secondary_info', 'primary_info']} {'HUD_HYPERSPACING_TO_N_IN_N_SECONDS': ['destination', 'countdown']} {'HUD_HYPERSPACING_TO_N_IN_N_SECONDS': ['countdown', 'destination']} {'LOCATED_N_KM_FROM_THE_CENTRE_OF_NAME': ['distance', 'name']} {'LOCATED_N_KM_FROM_THE_CENTRE_OF_NAME': ['name', 'distance']} {'MARKET_BUYLINE': ['amount', 'price']} {'MARKET_BUYLINE': ['price', 'amount']} {'MARKET_SELLINE': ['amount', 'price']} {'MARKET_SELLINE': ['price', 'amount']} {'REPAIR_X_HULL_DAMAGE_FOR_X': ['damage', 'price']} {'REPAIR_X_HULL_DAMAGE_FOR_X': ['price', 'damage']} {'STATION_ORBIT': ['orbit_period', 'parent_body']} {'STATION_ORBIT': ['parent_body', 'orbit_period']} {'THIS_IS_FACTION_POLICE': ['faction_police', 'faction']} {'THIS_IS_FACTION_POLICE': ['faction', 'faction_police']} Checking file: data/lang/ui-core/sv.json FAIL: {'PLEASE_REPORT_THIS_ERROR': ['path']} {'PLEASE_REPORT_THIS_ERROR': ['path', 'path']} Checking file: data/lang/ui-core/ru.json FAIL: {'STATION_ORBIT': ['orbit_period', 'parent_body']} {'STATION_ORBIT': ['parent_body', 'orbit_period']} Checking file: data/lang/module-combat/hu.json FAIL: {'HARVESTING_2': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'org', 'cash', 'area', 'area', 'dist']} {'HARVESTING_2': ['system', 'area', 'sectorx', 'sectory', 'sectorz', 'org', 'cash', 'area', 'area', 'dist']} {'MILITARY_1': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'area', 'dist']} {'MILITARY_1': ['system', 'area', 'sectorx', 'sectory', 'sectorz', 'cash', 'area', 'dist']} {'MILITARY_2': ['system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash', 'area']} {'MILITARY_2': ['cash', 'area', 'system', 'sectorx', 'sectory', 'sectorz']} {'MILITARY_3': ['mission', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'MILITARY_3': ['mission', 'sectorx', 'sectorz', 'dist', 'cash']} {'MILITARY_IT_MUST_BE_COMPLETED_BY': ['area', 'date']} {'MILITARY_IT_MUST_BE_COMPLETED_BY': ['date']} {'MINING_1': ['org', 'area', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'system', 'dist']} {'MINING_1': ['org', 'area', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'MINING_3': ['org', 'area', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'mission', 'area', 'dist']} {'MINING_3': ['org', 'area', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash', 'mission']} {'POLICE_1': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash', 'area']} {'POLICE_1': ['system', 'area', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'POLICE_2': ['org', 'cash', 'system', 'sectorx', 'sectory', 'sectorz', 'area', 'dist']} {'POLICE_2': ['org', 'cash', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'area', 'dist']} Checking file: data/lang/module-combat/fr.json FAIL: {'HARVESTING_3': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'system', 'dist', 'cash']} {'HARVESTING_3': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'système', 'dist', 'cash']} Checking file: data/lang/module-combat/it.json FAIL: {'ADTEXT_5': ['mission', 'cash']} {'ADTEXT_5': ['missione', 'cash']} {'POLICE_3': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'POLICE_3': ['area', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} Checking file: data/lang/module-combat/de.json FAIL: {'MINING_1': ['org', 'area', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'system', 'dist']} {'MINING_1': ['org', 'area', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'dist']} {'POLICE_1': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash', 'area']} {'POLICE_1': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'area']} Checking file: data/lang/module-combat/pl.json FAIL: {'HARVESTING_2': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'org', 'cash', 'area', 'area', 'dist']} {'HARVESTING_2': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'org', 'cash', 'area', 'dist']} {'MEET_ME_THERE': ['rendezvous']} {'MEET_ME_THERE': ['randezvous']} {'MINING_1': ['org', 'area', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'system', 'dist']} {'MINING_1': ['org', 'area', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'systemu', 'dist']} {'MINING_IT_MUST_BE_COMPLETED_BY': ['area', 'date']} {'MINING_IT_MUST_BE_COMPLETED_BY': ['area', 'date|']} {'POLICE_1': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash', 'area']} {'POLICE_1': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash na misję w {area']} {'POLICE_2': ['org', 'cash', 'system', 'sectorx', 'sectory', 'sectorz', 'area', 'dist']} {'POLICE_2': ['org', 'cash', 'system', 'sectorx', 'sectory', 'sectorz', 'area). Potrzebujesz hipernapędu zdolnego pokonać odległość {dist']} Checking file: data/lang/module-combat/zh.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-combat/el.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-combat/tr.json FAIL: {'HARVESTING_1': ['org', 'cash', 'mission', 'system', 'sectorx', 'sectory', 'sectorz', 'area', 'dist']} {'HARVESTING_1': ['org', 'system', 'sectorx', 'sectory', 'sectorz', 'mission', 'cash', 'area', 'dist']} {'HARVESTING_2': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'org', 'cash', 'area', 'area', 'dist']} {'HARVESTING_2': ['system', 'sectorx', 'sectory', 'sectorz', 'area', 'org', 'area', 'cash', 'area', 'dist']} {'HARVESTING_3': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'system', 'dist', 'cash']} {'HARVESTING_3': ['system', 'sectorx', 'sectory', 'sectorz', 'area', 'system', 'dist', 'cash']} {'MILITARY_1': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'area', 'dist']} {'MILITARY_1': ['system', 'sectorx', 'sectory', 'sectorz', 'area', 'cash', 'area', 'dist']} {'MILITARY_2': ['system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash', 'area']} {'MILITARY_2': ['dist', 'system', 'sectorx', 'sectory', 'sectorz', 'area', 'cash']} {'MILITARY_3': ['mission', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'MILITARY_3': ['dist', 'system', 'sectorx', 'sectory', 'sectorz', 'mission', 'cash']} {'MINING_1': ['org', 'area', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'system', 'dist']} {'MINING_1': ['org', 'system', 'sectorx', 'sectory', 'sectorz', 'area', 'cash', 'system', 'dist']} {'MINING_2': ['org', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'area', 'cash']} {'MINING_2': ['org', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'area']} {'MINING_3': ['org', 'area', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'mission', 'area', 'dist']} {'MINING_3': ['org', 'system', 'sectorx', 'sectory', 'sectorz', 'area', 'mission', 'cash', 'area', 'dist']} {'POLICE_1': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash', 'area']} {'POLICE_1': ['dist', 'system', 'sectorx', 'sectory', 'sectorz', 'area', 'area', 'cash']} {'POLICE_2': ['org', 'cash', 'system', 'sectorx', 'sectory', 'sectorz', 'area', 'dist']} {'POLICE_2': ['org', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'area', 'dist']} {'POLICE_3': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'POLICE_3': ['system', 'sectorx', 'sectory', 'sectorz', 'area', 'dist', 'cash']} Checking file: data/lang/module-combat/sv.json FAIL: {'HARVESTING_2': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'org', 'cash', 'area', 'area', 'dist']} {'HARVESTING_2': ['area', 'system', 'sectorx', 'sector', 'sectorz', 'org', 'cash', 'area', 'area', 'dist']} {'POLICE_3': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'POLICE_3': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'distans', 'cash']} Checking file: data/lang/module-combat/nl.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-combat/cs.json FAIL: {'MINING_2': ['org', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'area', 'cash']} {'MINING_2': ['org', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash', 'area']} Checking file: data/lang/module-combat/ru.json FAIL: {'HARVESTING_1': ['org', 'cash', 'mission', 'system', 'sectorx', 'sectory', 'sectorz', 'area', 'dist']} {'HARVESTING_1': ['Org', 'cash', 'mission', 'system', 'sectorx', 'sectory', 'sectorz', 'area', 'dist']} {'HARVESTING_2': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'org', 'cash', 'area', 'area', 'dist']} {'HARVESTING_2': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'Org', 'cash', 'area', 'dist']} {'HARVESTING_3': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'system', 'dist', 'cash']} {'HARVESTING_3': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'MINING_1': ['org', 'area', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'system', 'dist']} {'MINING_1': ['Org', 'area', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'system', 'dist']} {'MINING_2': ['org', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'area', 'cash']} {'MINING_2': ['org', 'system', 'sectorx', 'sectory', 'dist', 'cash', 'area']} {'POLICE_1': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash', 'area']} {'POLICE_1': ['area', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'POLICE_2': ['org', 'cash', 'system', 'sectorx', 'sectory', 'sectorz', 'area', 'dist']} {'POLICE_2': ['Org', 'cash', 'system', 'sectorx', 'sectory', 'sectorz', 'area', 'dist']} Checking file: data/lang/module-deliverpackage/pt_BR.json FAIL: {'FLAVOUR_0_INTROTEXT': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_0_INTROTEXT': ['nome', 'dinheiro', 'porto estelar', 'sistema', 'setorx', 'setory', 'setorz', 'distância']} {'FLAVOUR_1_INTROTEXT': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_1_INTROTEXT': ['nome', 'dinheiro', 'porto estelar', 'sistema', 'setorx', 'setory', 'setorz', 'distância']} {'FLAVOUR_2_INTROTEXT': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_2_INTROTEXT': ['nome', 'dinheiro', 'porto estelar', 'sistema', 'setorx', 'setory', 'setorz', 'distância']} {'FLAVOUR_3_INTROTEXT': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_3_INTROTEXT': ['nome', 'dinheiro', 'porto estelar', 'sistema', 'setorx', 'setory', 'setorz', 'distância']} {'FLAVOUR_4_INTROTEXT': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_4_INTROTEXT': ['nome', 'dinheiro', 'porto estelar', 'sistema', 'setorx', 'setory', 'setorz', 'distância']} {'FLAVOUR_5_INTROTEXT': ['name', 'cash', 'starport']} {'FLAVOUR_5_INTROTEXT': ['nome', 'dinheiro', 'porto estelar']} {'FLAVOUR_6_INTROTEXT': ['name', 'cash', 'starport']} {'FLAVOUR_6_INTROTEXT': ['nome', 'dinheiro', 'porto estelar']} {'FLAVOUR_7_INTROTEXT': ['starport', 'cash']} {'FLAVOUR_7_INTROTEXT': ['porto estelar', 'dinheiro']} {'FLAVOUR_8_INTROTEXT': ['name', 'starport', 'cash']} {'FLAVOUR_8_INTROTEXT': ['nome', 'porto estelar', 'dinheiro']} {'FLAVOUR_9_INTROTEXT': ['starport', 'cash']} {'FLAVOUR_9_INTROTEXT': ['porto estelar', 'dinheiro']} {'PIRATE_TAUNTS_0': ['client']} {'PIRATE_TAUNTS_0': ['cliente']} {'PIRATE_TAUNTS_2': ['client']} {'PIRATE_TAUNTS_2': ['cliente']} {'PIRATE_TAUNTS_6': ['client']} {'PIRATE_TAUNTS_6': ['cliente']} {'PIRATE_TAUNTS_8': ['location']} {'PIRATE_TAUNTS_8': ['local']} Checking file: data/lang/module-deliverpackage/pt.json FAIL: {'PIRATE_TAUNTS_0': ['client']} {'PIRATE_TAUNTS_0': ['cliente']} Checking file: data/lang/module-deliverpackage/zh.json FAIL: {'FLAVOUR_0_INTROTEXT': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_0_INTROTEXT': ['name', 'cash', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'starport']} {'FLAVOUR_1_INTROTEXT': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_1_INTROTEXT': ['name', 'cash', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'dist']} {'FLAVOUR_2_INTROTEXT': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_2_INTROTEXT': ['name', 'cash', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'dist']} {'FLAVOUR_3_INTROTEXT': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_3_INTROTEXT': ['name', 'cash', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'dist']} {'FLAVOUR_4_INTROTEXT': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_4_INTROTEXT': ['name', 'cash', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'dist']} {'FLAVOUR_5_INTROTEXT': ['name', 'cash', 'starport']} {'FLAVOUR_5_INTROTEXT': ['name', 'starport', 'cash']} Checking file: data/lang/module-deliverpackage/id.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-deliverpackage/tr.json FAIL: {'FLAVOUR_0_INTROTEXT': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_0_INTROTEXT': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cash']} {'FLAVOUR_1_INTROTEXT': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_1_INTROTEXT': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cash']} {'FLAVOUR_2_INTROTEXT': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_2_INTROTEXT': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cash']} {'FLAVOUR_3_INTROTEXT': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_3_INTROTEXT': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cash']} {'FLAVOUR_4_INTROTEXT': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_4_INTROTEXT': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cash']} {'FLAVOUR_5_INTROTEXT': ['name', 'cash', 'starport']} {'FLAVOUR_5_INTROTEXT': ['name', 'starport', 'cash']} {'FLAVOUR_6_INTROTEXT': ['name', 'cash', 'starport']} {'FLAVOUR_6_INTROTEXT': ['name', 'starport', 'cash']} Checking file: data/lang/module-deliverpackage/sv.json FAIL: {'FLAVOUR_1_INTROTEXT': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_1_INTROTEXT': ['name', 'cash', 'starport', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_2_INTROTEXT': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_2_INTROTEXT': ['name', 'cash', 'starport', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_3_INTROTEXT': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_3_INTROTEXT': ['name', 'cash', 'starport', 'sectorx', 'sectory', 'sectorz', 'dist']} Checking file: data/lang/module-soldout/hu.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-soldout/zh.json FAIL: {'MESSAGE': ['name', 'commodity', 'price']} {'MESSAGE': ['name', 'commodity']} Checking file: data/lang/module-soldout/cs.json FAIL: {'NOT_IN_STOCK': ['commodity']} {'NOT_IN_STOCK': ['komodity']} Checking file: data/lang/module-searchrescue/gd.json FAIL: {'ENTITY_FAMILY_BUSINESS_8': ['name', 'locality']} {'ENTITY_FAMILY_BUSINESS_8': ['locality', 'name']} {'FLAVOUR_4_INTROTEXT': ['starport', 'shiplabel', 'cash']} {'FLAVOUR_4_INTROTEXT': ['shiplabel', 'starport', 'cash']} {'FLAVOUR_7_INTROTEXT': ['name', 'entity', 'ship', 'shiplabel', 'crew', 'problem', 'cash']} {'FLAVOUR_7_INTROTEXT': ['name', 'entity', 'ship', 'shiplabel', 'problem', 'crew', 'cash']} Checking file: data/lang/module-searchrescue/hu.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-searchrescue/fr.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-searchrescue/de.json FAIL: {'FLAVOUR_2_INTROTEXT': ['starport', 'shiplabel', 'cash']} {'FLAVOUR_2_INTROTEXT': ['starport', 'cash']} Checking file: data/lang/module-searchrescue/pl.json FAIL: {'RESULT_DELIVERY_COMM': ['done', 'todo', 'cargotype']} {'RESULT_DELIVERY_COMM': ['done', 'todo{ ton {cargotype']} {'RESULT_PICKUP_COMM': ['done', 'todo', 'cargotype']} {'RESULT_PICKUP_COMM': ['done', 'todo{ ton {cargotype']} Checking file: data/lang/module-searchrescue/zh.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-searchrescue/el.json FAIL: {'FLAVOUR_4_INTROTEXT': ['starport', 'shiplabel', 'cash']} {'FLAVOUR_4_INTROTEXT': ['shiplabel', 'starport', 'cash']} Checking file: data/lang/module-searchrescue/ga.json FAIL: {'ENTITY_FAMILY_BUSINESS_8': ['name', 'locality']} {'ENTITY_FAMILY_BUSINESS_8': ['locality', 'name']} {'FLAVOUR_1_INTROTEXT': ['starport', 'ship', 'planet', 'starport', 'cash']} {'FLAVOUR_1_INTROTEXT': ['starport', 'ship', 'planet', 'cash', 'starport']} {'FLAVOUR_1_LOCATIONTEXT': ['planet', 'lat', 'long', 'shiplabel']} {'FLAVOUR_1_LOCATIONTEXT': ['lat', 'long', 'planet', 'shiplabel']} Checking file: data/lang/module-searchrescue/tr.json FAIL: {'FLAVOUR_1_INTROTEXT': ['starport', 'ship', 'planet', 'starport', 'cash']} {'FLAVOUR_1_INTROTEXT': ['starport', 'planet', 'ship', 'starport', 'cash']} {'FLAVOUR_2_LOCATIONTEXT': ['lat', 'long', 'planet']} {'FLAVOUR_2_LOCATIONTEXT': ['planet', 'lat', 'long']} {'FLAVOUR_3_INTROTEXT': ['name', 'starport', 'shiplabel', 'starport']} {'FLAVOUR_3_INTROTEXT': ['starport', 'name', 'starport', 'shiplabel']} {'FLAVOUR_3_TYPEOFHELPTEXT': ['starport', 'starport']} {'FLAVOUR_3_TYPEOFHELPTEXT': ['starport']} {'FLAVOUR_4_INTROTEXT': ['starport', 'shiplabel', 'cash']} {'FLAVOUR_4_INTROTEXT': ['shiplabel', 'starport', 'cash']} {'FLAVOUR_5_INTROTEXT': ['starport', 'shiplabel', 'cash', 'starport']} {'FLAVOUR_5_INTROTEXT': ['starport', 'shiplabel', 'starport', 'cash']} {'FLAVOUR_6_INTROTEXT': ['name', 'entity', 'ship', 'shiplabel', 'problem', 'cash']} {'FLAVOUR_6_INTROTEXT': ['entity', 'name', 'problem', 'ship', 'shiplabel', 'cash']} {'FLAVOUR_6_LOCATIONTEXT': ['planet', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'FLAVOUR_6_LOCATIONTEXT': ['dist', 'system', 'sectorx', 'sectory', 'sectorz', 'planet']} {'FLAVOUR_7_INTROTEXT': ['name', 'entity', 'ship', 'shiplabel', 'crew', 'problem', 'cash']} {'FLAVOUR_7_INTROTEXT': ['entity', 'name', 'ship', 'shiplabel', 'problem', 'crew', 'cash']} {'FLAVOUR_7_LOCATIONTEXT': ['system', 'sectorx', 'sectory', 'sectorz', 'dist', 'planet']} {'FLAVOUR_7_LOCATIONTEXT': ['dist', 'system', 'sectorx', 'sectory', 'sectorz', 'planet']} {'RESULT_DELIVERY_COMM': ['done', 'todo', 'cargotype']} {'RESULT_DELIVERY_COMM': ['todo', 'cargotype', 'done']} {'RESULT_DELIVERY_CREW': ['done', 'todo']} {'RESULT_DELIVERY_CREW': ['todo', 'done']} {'RESULT_DELIVERY_PASS': ['done', 'todo']} {'RESULT_DELIVERY_PASS': ['todo', 'done']} {'RESULT_PICKUP_COMM': ['done', 'todo', 'cargotype']} {'RESULT_PICKUP_COMM': ['todo', 'cargotype', 'done']} {'RESULT_PICKUP_CREW': ['done', 'todo']} {'RESULT_PICKUP_CREW': ['todo', 'done']} {'RESULT_PICKUP_PASS': ['done', 'todo']} {'RESULT_PICKUP_PASS': ['todo', 'done']} Checking file: data/lang/module-searchrescue/bg.json FAIL: {'FLAVOUR_4_LOCATIONTEXT': ['planet', 'lat', 'long']} {'FLAVOUR_4_LOCATIONTEXT': ['lat', 'long', 'planet']} {'FLAVOUR_5_INTROTEXT': ['starport', 'shiplabel', 'cash', 'starport']} {'FLAVOUR_5_INTROTEXT': ['starport', 'shiplabel', 'starport', 'cash']} {'RESULT_DELIVERY_COMM': ['done', 'todo', 'cargotype']} {'RESULT_DELIVERY_COMM': ['done', 'cargotype', 'todo']} {'RESULT_PICKUP_COMM': ['done', 'todo', 'cargotype']} {'RESULT_PICKUP_COMM': ['done', 'cargotype', 'todo']} Checking file: data/lang/module-searchrescue/sv.json FAIL: {'FLAVOUR_5_INTROTEXT': ['starport', 'shiplabel', 'cash', 'starport']} {'FLAVOUR_5_INTROTEXT': ['starport', 'shiplabel', 'cach', 'starport']} {'FLAVOUR_6_INTROTEXT': ['name', 'entity', 'ship', 'shiplabel', 'problem', 'cash']} {'FLAVOUR_6_INTROTEXT': ['name', 'ship', 'shiplabel', 'problem', 'cash']} Checking file: data/lang/module-searchrescue/cs.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-searchrescue/es.json FAIL: {'ENTITY_FAMILY_BUSINESS_3': ['name', 'locality']} {'ENTITY_FAMILY_BUSINESS_3': ['locality', 'name']} {'ENTITY_FAMILY_BUSINESS_8': ['name', 'locality']} {'ENTITY_FAMILY_BUSINESS_8': ['locality', 'name']} Checking file: data/lang/module-searchrescue/ru.json FAIL: {'ENTITY_FAMILY_BUSINESS_8': ['name', 'locality']} {'ENTITY_FAMILY_BUSINESS_8': ['locality', 'name']} Checking file: data/lang/module-crewcontracts/hu.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-cargorun/hu.json FAIL: {'INTROTEXT_1': ['name', 'cash', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'INTROTEXT_1': ['name', 'cash', 'cargoname', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'INTROTEXT_2': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'INTROTEXT_2': ['name', 'cargoname', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} Checking file: data/lang/module-cargorun/fr.json FAIL: {'INTROTEXT_1': ['name', 'cash', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'INTROTEXT_1': ['name', 'cash', 'cargoname', 'starport', 'sectorx', 'sectory', 'sectorz', 'dist']} {'INTROTEXT_2': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'INTROTEXT_2': ['name', 'cargoname', 'starport', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'WHYSOMUCH_FLUFFY_1': ['cargoname', 'cargoname']} {'WHYSOMUCH_FLUFFY_1': ['cargoname']} Checking file: data/lang/module-cargorun/it.json FAIL: {'INTROTEXT_2': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'INTROTEXT_2': ['Name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} Checking file: data/lang/module-cargorun/de.json FAIL: {'INTROTEXT_PICKUP_2': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash', 'dom_starport', 'dom_system', 'dom_sectorx', 'dom_sectory', 'dom_sectorz']} {'INTROTEXT_PICKUP_2': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'dom_starport', 'dom_system', 'dom_sectorx', 'dom_sectory', 'dom_sectorz']} Checking file: data/lang/module-cargorun/pl.json FAIL: {'INTROTEXT_EXPENSIVE_1': ['starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'dist']} {'INTROTEXT_EXPENSIVE_1': ['starport', 'sectorx', 'sectory', 'sectorz', 'cash', 'dist']} {'INTROTEXT_INFRASTRUCTURE_1': ['name', 'system', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'system', 'dist']} {'INTROTEXT_INFRASTRUCTURE_1': ['name', 'system', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'dist']} {'OFFER': ['amount', 'reward']} {'OFFER': ['amount', 'amount']} Checking file: data/lang/module-cargorun/ro.json FAIL: {'INTROTEXT_MINING_1': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'INTROTEXT_MINING_1': ['name', 'cargoname', 'starport', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'WHYSOMUCH_FLUFFY_1': ['cargoname', 'cargoname']} {'WHYSOMUCH_FLUFFY_1': ['cargoname']} Checking file: data/lang/module-cargorun/zh.json FAIL: {'INTROTEXT_1': ['name', 'cash', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'INTROTEXT_1': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'cargoname', 'starport', 'cash', 'dist']} {'INTROTEXT_2': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'INTROTEXT_2': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'cargoname', 'starport', 'dist', 'cash']} {'INTROTEXT_3': ['name', 'name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'dist']} {'INTROTEXT_3': ['name', 'name', 'system', 'sectorx', 'sectory', 'sectorz', 'cargoname', 'starport', 'dist', 'cash']} {'INTROTEXT_EXPENSIVE_1': ['starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'dist']} {'INTROTEXT_EXPENSIVE_1': ['system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cash', 'dist']} {'INTROTEXT_FLUFFY_1': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'INTROTEXT_FLUFFY_1': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'cargoname', 'starport', 'dist', 'cash']} {'INTROTEXT_INFRASTRUCTURE_1': ['name', 'system', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'system', 'dist']} {'INTROTEXT_INFRASTRUCTURE_1': ['name', 'system', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cargoname', 'cash', 'system', 'dist']} {'INTROTEXT_LOCAL_1': ['name', 'starport', 'cash', 'cargoname', 'starport']} {'INTROTEXT_LOCAL_1': ['name', 'starport', 'cargoname', 'starport', 'cash']} {'INTROTEXT_LOCAL_2': ['name', 'cash', 'cargoname', 'starport']} {'INTROTEXT_LOCAL_2': ['name', 'starport', 'cash', 'cargoname']} {'INTROTEXT_MINING_1': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'INTROTEXT_MINING_1': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'cargoname', 'starport', 'dist', 'cash']} {'INTROTEXT_PICKUP_1': ['name', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cargoname', 'dom_starport', 'dom_system', 'dom_sectorx', 'dom_sectory', 'dom_sectorz', 'cash', 'system', 'dist']} {'INTROTEXT_PICKUP_1': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cargoname', 'dom_system', 'dom_sectorx', 'dom_sectory', 'dom_sectorz', 'system', 'dist', 'cash']} {'INTROTEXT_PICKUP_2': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash', 'dom_starport', 'dom_system', 'dom_sectorx', 'dom_sectory', 'dom_sectorz']} {'INTROTEXT_PICKUP_2': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'cargoname', 'cash', 'dom_system', 'dom_sectorx', 'dom_sectory', 'dom_sectorz', 'dom_starport']} {'INTROTEXT_PICKUP_LOCAL_1': ['name', 'cash', 'cargoname', 'starport', 'dom_starport']} {'INTROTEXT_PICKUP_LOCAL_1': ['name', 'carportame', 'starport', 'dom_starport', 'cash']} {'INTROTEXT_PICKUP_LOCAL_2': ['name', 'cash', 'cargoname', 'starport', 'dom_starport']} {'INTROTEXT_PICKUP_LOCAL_2': ['name', 'cash', 'carportame', 'starport', 'dom_starport']} {'INTROTEXT_WEDDING_1': ['starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cargoname', 'dist', 'cash']} {'INTROTEXT_WEDDING_1': ['system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cargoname', 'cash']} {'INTROTEXT_WHOLESALER_1': ['name', 'system', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'INTROTEXT_WHOLESALER_1': ['name', 'system', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cash', 'dist']} {'INTROTEXT_WHOLESALER_2': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'INTROTEXT_WHOLESALER_2': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cash', 'dist']} Checking file: data/lang/module-cargorun/el.json FAIL: {'INTROTEXT_PICKUP_1': ['name', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cargoname', 'dom_starport', 'dom_system', 'dom_sectorx', 'dom_sectory', 'dom_sectorz', 'cash', 'system', 'dist']} {'INTROTEXT_PICKUP_1': ['name', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cargoname', 'dom_system', 'dom_sectorx', 'dom_sectory', 'dom_sectorz', 'cash', 'system', 'dist']} {'INTROTEXT_PICKUP_2': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash', 'dom_starport', 'dom_system', 'dom_sectorx', 'dom_sectory', 'dom_sectorz']} {'INTROTEXT_PICKUP_2': ['name', 'cargoname', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash', 'dom_starport', 'dom_system', 'dom_sectorx', 'dom_sectory', 'dom_sectorz']} Checking file: data/lang/module-cargorun/ga.json FAIL: {'INTROTEXT_EXPENSIVE_1': ['starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'dist']} {'INTROTEXT_EXPENSIVE_1': ['starport', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'INTROTEXT_INFRASTRUCTURE_1': ['name', 'system', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'system', 'dist']} {'INTROTEXT_INFRASTRUCTURE_1': ['name', 'system', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} Checking file: data/lang/module-cargorun/tr.json FAIL: {'INTROTEXT_1': ['name', 'cash', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'INTROTEXT_1': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cargoname', 'cash']} {'INTROTEXT_2': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'INTROTEXT_2': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cargoname', 'cash']} {'INTROTEXT_3': ['name', 'name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'dist']} {'INTROTEXT_3': ['name', 'name', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cargoname', 'dist', 'cash']} {'INTROTEXT_EXPENSIVE_1': ['starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'dist']} {'INTROTEXT_EXPENSIVE_1': ['system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cash', 'dist']} {'INTROTEXT_FLUFFY_1': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'INTROTEXT_FLUFFY_1': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cargoname', 'dist', 'cash']} {'INTROTEXT_INFRASTRUCTURE_1': ['name', 'system', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'system', 'dist']} {'INTROTEXT_INFRASTRUCTURE_1': ['name', 'system', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cargoname', 'cash', 'system', 'dist']} {'INTROTEXT_LOCAL_1': ['name', 'starport', 'cash', 'cargoname', 'starport']} {'INTROTEXT_LOCAL_1': ['name', 'starport', 'starport', 'cargoname', 'cash']} {'INTROTEXT_LOCAL_2': ['name', 'cash', 'cargoname', 'starport']} {'INTROTEXT_LOCAL_2': ['name', 'starport', 'cargoname', 'cash']} {'INTROTEXT_LOCAL_3': ['name', 'cargoname', 'starport', 'cash']} {'INTROTEXT_LOCAL_3': ['name', 'starport', 'cargoname', 'cash']} {'INTROTEXT_MINING_1': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'INTROTEXT_MINING_1': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cargoname', 'cash']} {'INTROTEXT_PICKUP_1': ['name', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cargoname', 'dom_starport', 'dom_system', 'dom_sectorx', 'dom_sectory', 'dom_sectorz', 'cash', 'system', 'dist']} {'INTROTEXT_PICKUP_1': ['name', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cargoname', 'dom_system', 'dom_sectorx', 'dom_sectory', 'dom_sectorz', 'dom_starport', 'system', 'dist', 'cash']} {'INTROTEXT_PICKUP_2': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash', 'dom_starport', 'dom_system', 'dom_sectorx', 'dom_sectory', 'dom_sectorz']} {'INTROTEXT_PICKUP_2': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'cargoname', 'cash', 'dom_system', 'dom_sectorx', 'dom_sectory', 'dom_sectorz']} {'INTROTEXT_PICKUP_LOCAL_1': ['name', 'cash', 'cargoname', 'starport', 'dom_starport']} {'INTROTEXT_PICKUP_LOCAL_1': ['name', 'starport', 'dom_starport', 'cargoname', 'cash']} {'INTROTEXT_PICKUP_LOCAL_2': ['name', 'cash', 'cargoname', 'starport', 'dom_starport']} {'INTROTEXT_PICKUP_LOCAL_2': ['name', 'starport', 'dom_starport', 'cargoname', 'cash']} {'INTROTEXT_WEDDING_1': ['starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cargoname', 'dist', 'cash']} {'INTROTEXT_WEDDING_1': ['system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cargoname', 'dist', 'cash']} {'INTROTEXT_WHOLESALER_1': ['name', 'system', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'INTROTEXT_WHOLESALER_1': ['name', 'system', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cash']} {'INTROTEXT_WHOLESALER_2': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'INTROTEXT_WHOLESALER_2': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cash']} {'OFFER': ['amount', 'reward']} {'OFFER': ['reward', 'amount']} {'OK_WE_AGREE': ['amount', 'reward']} {'OK_WE_AGREE': ['reward', 'amount']} Checking file: data/lang/module-cargorun/ja.json FAIL: {'HOWMUCH_WHOLESALER_1': ['amount', 'cargoname']} {'HOWMUCH_WHOLESALER_1': ['cargoname', 'amount']} {'INTROTEXT_1': ['name', 'cash', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'INTROTEXT_1': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cargoname', 'cash']} {'INTROTEXT_2': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'INTROTEXT_2': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cargoname', 'cash']} {'INTROTEXT_3': ['name', 'name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'dist']} {'INTROTEXT_3': ['name', 'name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cargoname', 'dist', 'cash']} {'INTROTEXT_MINING_1': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'INTROTEXT_MINING_1': ['name', 'dist', 'system', 'sectorx', 'sectory', 'sectorz', 'starport', 'cargoname', 'cash']} Checking file: data/lang/module-cargorun/cs.json FAIL: {'INTROTEXT_3': ['name', 'name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'dist']} {'INTROTEXT_3': ['name', 'name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'INTROTEXT_PICKUP_2': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash', 'dom_starport', 'dom_system', 'dom_sectorx', 'dom_sectory', 'dom_sectorz']} {'INTROTEXT_PICKUP_2': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash', 'cargoname', 'dom_starport', 'dom_system', 'dom_sectorx', 'dom_sectory', 'dom_sectorz']} Checking file: data/lang/module-cargorun/es.json FAIL: {'ADTEXT_LOCAL_1': ['starport']} {'ADTEXT_LOCAL_1': ['starport', 'starport']} {'INTROTEXT_EXPENSIVE_1': ['starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'dist']} {'INTROTEXT_EXPENSIVE_1': ['system', 'sectorx', 'sectory', 'sectorz', 'cash', 'dist']} Checking file: data/lang/module-cargorun/ru.json FAIL: {'INTROTEXT_EXPENSIVE_1': ['starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'dist']} {'INTROTEXT_EXPENSIVE_1': ['cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'INTROTEXT_INFRASTRUCTURE_1': ['name', 'system', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cash', 'system', 'dist']} {'INTROTEXT_INFRASTRUCTURE_1': ['name', 'system', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist', 'cash']} {'INTROTEXT_PICKUP_1': ['name', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'cargoname', 'dom_starport', 'dom_system', 'dom_sectorx', 'dom_sectory', 'dom_sectorz', 'cash', 'system', 'dist']} {'INTROTEXT_PICKUP_1': ['name', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dom_starport', 'dom_system', 'dom_sectorx', 'dom_sectory', 'dom_sectorz', 'cash', 'system', 'dist']} {'INTROTEXT_WHOLESALER_1': ['name', 'system', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'INTROTEXT_WHOLESALER_1': ['name', 'system', 'cash', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'INTROTEXT_WHOLESALER_2': ['name', 'cash', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} {'INTROTEXT_WHOLESALER_2': ['name', 'cash', 'cargoname', 'starport', 'system', 'sectorx', 'sectory', 'sectorz', 'dist']} Checking file: data/lang/quitconfirmation-core/pt_BR.json FAIL: {'MSG_5': ['no', 'yes']} {'MSG_5': ['no', 'sim']} Checking file: data/lang/quitconfirmation-core/hu.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/quitconfirmation-core/de.json FAIL: {'MSG_10': ['no']} {'MSG_10': ['nein']} {'MSG_8': ['no']} {'MSG_8': ['nein']} Checking file: data/lang/quitconfirmation-core/pl.json FAIL: {'MSG_12': ['no', 'yes']} {'MSG_12': ['no', 'tak']} Checking file: data/lang/quitconfirmation-core/zh.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-newseventcommodity/pt_BR.json FAIL: {'FLAVOUR_0_HEADLINE': ['date', 'system']} {'FLAVOUR_0_HEADLINE': ['data', 'sistema']} {'FLAVOUR_0_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_0_NEWSBODY': ['sistema', 'setorx', 'setory', 'setorz']} {'FLAVOUR_10_HEADLINE': ['date', 'system']} {'FLAVOUR_10_HEADLINE': ['data', 'sistema']} {'FLAVOUR_10_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_10_NEWSBODY': ['sistema', 'setorx', 'setory', 'setorz']} {'FLAVOUR_11_HEADLINE': ['date', 'system']} {'FLAVOUR_11_HEADLINE': ['data', 'sistema']} {'FLAVOUR_11_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_11_NEWSBODY': ['sistema', 'setorx', 'setory', 'setorz']} {'FLAVOUR_12_HEADLINE': ['date', 'system']} {'FLAVOUR_12_HEADLINE': ['data', 'sistema']} {'FLAVOUR_12_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_12_NEWSBODY': ['sistema', 'setorx', 'setory', 'setorz']} {'FLAVOUR_13_HEADLINE': ['date', 'system']} {'FLAVOUR_13_HEADLINE': ['data', 'sistema']} {'FLAVOUR_15_HEADLINE': ['date', 'system']} {'FLAVOUR_15_HEADLINE': ['data', 'sistema']} {'FLAVOUR_15_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_15_NEWSBODY': ['sistema', 'setorx', 'setory', 'setorz']} {'FLAVOUR_16_HEADLINE': ['date', 'system']} {'FLAVOUR_16_HEADLINE': ['data', 'sistema']} {'FLAVOUR_17_HEADLINE': ['date', 'system']} {'FLAVOUR_17_HEADLINE': ['data', 'sistema']} {'FLAVOUR_17_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_17_NEWSBODY': ['sistema', 'setorx', 'setory', 'setorz']} {'FLAVOUR_18_HEADLINE': ['date', 'system']} {'FLAVOUR_18_HEADLINE': ['data', 'sistema']} {'FLAVOUR_18_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_18_NEWSBODY': ['sistema', 'setorx', 'setory', 'setorz']} {'FLAVOUR_19_HEADLINE': ['date', 'system']} {'FLAVOUR_19_HEADLINE': ['data', 'sistema']} {'FLAVOUR_19_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_19_NEWSBODY': ['sistema', 'setorx', 'setory', 'setorz']} {'FLAVOUR_1_HEADLINE': ['date', 'system']} {'FLAVOUR_1_HEADLINE': ['data', 'sistema']} {'FLAVOUR_1_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_1_NEWSBODY': ['sistema', 'setorx', 'setory', 'setorz']} {'FLAVOUR_20_HEADLINE': ['date', 'system']} {'FLAVOUR_20_HEADLINE': ['data', 'sistema']} {'FLAVOUR_20_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_20_NEWSBODY': ['sistema', 'setorx', 'setory', 'setorz']} {'FLAVOUR_21_HEADLINE': ['date', 'system']} {'FLAVOUR_21_HEADLINE': ['data', 'sistema']} {'FLAVOUR_21_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_21_NEWSBODY': ['sistema', 'setorx', 'setory', 'setorz']} {'FLAVOUR_22_HEADLINE': ['date', 'system']} {'FLAVOUR_22_HEADLINE': ['datas', 'sistema']} {'FLAVOUR_22_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_22_NEWSBODY': ['sistema', 'setorx', 'setory', 'setorz']} {'FLAVOUR_23_HEADLINE': ['date', 'system']} {'FLAVOUR_23_HEADLINE': ['data', 'sistema']} {'FLAVOUR_2_HEADLINE': ['date', 'system']} {'FLAVOUR_2_HEADLINE': ['data', 'sistema']} {'FLAVOUR_2_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_2_NEWSBODY': ['sistema', 'setorx', 'setory', 'setorz']} {'FLAVOUR_3_HEADLINE': ['date', 'system']} {'FLAVOUR_3_HEADLINE': ['data', 'sistema']} {'FLAVOUR_3_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_3_NEWSBODY': ['sistema', 'setorx', 'setory', 'setorz']} {'FLAVOUR_4_HEADLINE': ['date', 'system']} {'FLAVOUR_4_HEADLINE': ['data', 'sistema']} {'FLAVOUR_4_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_4_NEWSBODY': ['sistema', 'setorx', 'setory', 'setorz']} {'FLAVOUR_5_HEADLINE': ['date', 'system']} {'FLAVOUR_5_HEADLINE': ['data', 'sistema']} {'FLAVOUR_6_HEADLINE': ['date', 'system']} {'FLAVOUR_6_HEADLINE': ['data', 'sistema']} {'FLAVOUR_6_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_6_NEWSBODY': ['sistema', 'setorx', 'setory', 'setorz']} {'FLAVOUR_7_HEADLINE': ['date', 'system']} {'FLAVOUR_7_HEADLINE': ['data', 'sistema']} {'FLAVOUR_7_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_7_NEWSBODY': ['sistema', 'setorx', 'setory', 'setorz']} {'FLAVOUR_8_HEADLINE': ['date', 'system']} {'FLAVOUR_8_HEADLINE': ['data', 'sistema']} {'FLAVOUR_8_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_8_NEWSBODY': ['sistema', 'setorx', 'setory', 'setorz']} {'FLAVOUR_9_HEADLINE': ['date', 'system']} {'FLAVOUR_9_HEADLINE': ['data', 'sistema']} {'FLAVOUR_9_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_9_NEWSBODY': ['sistema', 'setorx', 'setory', 'setorz']} {'GRATEFUL_GREETING_1': ['cargo']} {'GRATEFUL_GREETING_1': ['carga']} {'GRATEFUL_GREETING_2': ['cargo']} {'GRATEFUL_GREETING_2': ['carga']} {'GRATEFUL_GREETING_3': ['cargo']} {'GRATEFUL_GREETING_3': ['carga']} {'GRATEFUL_GREETING_4': ['cargo']} {'GRATEFUL_GREETING_4': ['carga']} {'GRATEFUL_GREETING_5': ['cargo']} {'GRATEFUL_GREETING_5': ['carga']} {'TITLE_0': ['newspaper']} {'TITLE_0': ['jornal']} {'TITLE_1': ['newspaper']} {'TITLE_1': ['jornal']} {'TITLE_2': ['newspaper']} {'TITLE_2': ['jornal']} {'TITLE_3': ['newspaper']} {'TITLE_3': ['jornal']} {'TITLE_4': ['newspaper']} {'TITLE_4': ['jornal']} Checking file: data/lang/module-newseventcommodity/fr.json FAIL: ERROR: mismatching keys, probably missing required {variable} all together Checking file: data/lang/module-newseventcommodity/it.json FAIL: {'FLAVOUR_16_HEADLINE': ['date', 'system']} {'FLAVOUR_16_HEADLINE': ['data', 'system']} {'FLAVOUR_19_HEADLINE': ['date', 'system']} {'FLAVOUR_19_HEADLINE': ['data', 'system']} {'FLAVOUR_7_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_7_NEWSBODY': ['system']} Checking file: data/lang/module-newseventcommodity/da.json FAIL: {'FLAVOUR_2_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_2_NEWSBODY': ['system] ({sectorx', 'sectory', 'sectorz']} Checking file: data/lang/module-newseventcommodity/zh.json FAIL: {'FLAVOUR_11_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_11_NEWSBODY': ['system']} {'FLAVOUR_13_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_13_NEWSBODY': ['system', 'sectorx', 'sectorz', 'sectorz']} {'FLAVOUR_16_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_16_NEWSBODY': ['system', 'sectorx', 'sectorz', 'sectorz']} {'FLAVOUR_22_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_22_NEWSBODY': ['system']} {'FLAVOUR_5_HEADLINE': ['date', 'system']} {'FLAVOUR_5_HEADLINE': ['system']} Checking file: data/lang/module-newseventcommodity/sv.json FAIL: {'FLAVOUR_13_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_13_NEWSBODY': ['system', 'sector', 'sector', 'sector']} {'FLAVOUR_16_HEADLINE': ['date', 'system']} {'FLAVOUR_16_HEADLINE': ['date']} {'FLAVOUR_6_HEADLINE': ['date', 'system']} {'FLAVOUR_6_HEADLINE': ['date']} {'FLAVOUR_7_HEADLINE': ['date', 'system']} {'FLAVOUR_7_HEADLINE': ['datum', 'system']} Checking file: data/lang/module-newseventcommodity/nl.json FAIL: {'TITLE_0': ['newspaper']} {'TITLE_0': ['newpaper']} Checking file: data/lang/module-newseventcommodity/cs.json FAIL: {'FLAVOUR_21_HEADLINE': ['date', 'system']} {'FLAVOUR_21_HEADLINE': ['date', 'systému']} {'FLAVOUR_21_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_21_NEWSBODY': ['systém', 'sectorx', 'sectory', 'sectorz']} Checking file: data/lang/module-newseventcommodity/es.json FAIL: {'FLAVOUR_11_NEWSBODY': ['system', 'sectorx', 'sectory', 'sectorz']} {'FLAVOUR_11_NEWSBODY': ['sistema', 'sectorx', 'sectory', 'sectorz']} Checking file: data/lang/module-newseventcommodity/ru.json FAIL: {'FLAVOUR_0_HEADLINE': ['date', 'system']} {'FLAVOUR_0_HEADLINE': ['system']} {'FLAVOUR_10_HEADLINE': ['date', 'system']} {'FLAVOUR_10_HEADLINE': ['system']} {'FLAVOUR_11_HEADLINE': ['date', 'system']} {'FLAVOUR_11_HEADLINE': ['system']} {'FLAVOUR_12_HEADLINE': ['date', 'system']} {'FLAVOUR_12_HEADLINE': ['system']} {'FLAVOUR_13_HEADLINE': ['date', 'system']} {'FLAVOUR_13_HEADLINE': ['system']} {'FLAVOUR_14_HEADLINE': ['date', 'system']} {'FLAVOUR_14_HEADLINE': ['system']} {'FLAVOUR_15_HEADLINE': ['date', 'system']} {'FLAVOUR_15_HEADLINE': ['system']} {'FLAVOUR_16_HEADLINE': ['date', 'system']} {'FLAVOUR_16_HEADLINE': ['system']} {'FLAVOUR_17_HEADLINE': ['date', 'system']} {'FLAVOUR_17_HEADLINE': ['system']} {'FLAVOUR_18_HEADLINE': ['date', 'system']} {'FLAVOUR_18_HEADLINE': ['system']} {'FLAVOUR_19_HEADLINE': ['date', 'system']} {'FLAVOUR_19_HEADLINE': ['system']} {'FLAVOUR_1_HEADLINE': ['date', 'system']} {'FLAVOUR_1_HEADLINE': ['system']} {'FLAVOUR_20_HEADLINE': ['date', 'system']} {'FLAVOUR_20_HEADLINE': ['system']} {'FLAVOUR_21_HEADLINE': ['date', 'system']} {'FLAVOUR_21_HEADLINE': ['system']} {'FLAVOUR_22_HEADLINE': ['date', 'system']} {'FLAVOUR_22_HEADLINE': ['system']} {'FLAVOUR_23_HEADLINE': ['date', 'system']} {'FLAVOUR_23_HEADLINE': ['system']} {'FLAVOUR_2_HEADLINE': ['date', 'system']} {'FLAVOUR_2_HEADLINE': ['system']} {'FLAVOUR_3_HEADLINE': ['date', 'system']} {'FLAVOUR_3_HEADLINE': ['system']} {'FLAVOUR_4_HEADLINE': ['date', 'system']} {'FLAVOUR_4_HEADLINE': ['system']} {'FLAVOUR_5_HEADLINE': ['date', 'system']} {'FLAVOUR_5_HEADLINE': ['system']} {'FLAVOUR_6_HEADLINE': ['date', 'system']} {'FLAVOUR_6_HEADLINE': ['system']} {'FLAVOUR_7_HEADLINE': ['date', 'system']} {'FLAVOUR_7_HEADLINE': ['system']} {'FLAVOUR_8_HEADLINE': ['date', 'system']} {'FLAVOUR_8_HEADLINE': ['system']} {'FLAVOUR_9_HEADLINE': ['date', 'system']} {'FLAVOUR_9_HEADLINE': ['system']} Checking file: data/lang/module-system/pl.json FAIL: {'DISCOVERED_HIDDEN_BASES': ['portcount', 'bases']} {'DISCOVERED_HIDDEN_BASES': ['portcount']} Checking file: data/lang/module-system/cs.json FAIL: {'DISCOVERED_HIDDEN_BASES': ['portcount', 'bases']} {'DISCOVERED_HIDDEN_BASES': ['portcount', 'základen']} Checking file: data/lang/module-system/ru.json FAIL: {'DISCOVERED_HIDDEN_BASES': ['portcount', 'bases']} {'DISCOVERED_HIDDEN_BASES': ['bases', 'portcount']} ```
JeromeChignoli commented 2 days ago

nice work. Did you work from the shell command output ? There are typos on the « } » tags (as in the 3rd & 7th outputs of the shell command). By luck, a second {key} was present so first tag is printed. There may be typos on « { » tags, or on « } » tags without second {key}: these will not be displayed by the shell command.

impaktor commented 2 days ago

@JeromeChignoli I wrote a python script this morning. I should be able to extend it to just fix all the errors, and we'll push it to transifex directly, so you don't need to do anything.

JeromeChignoli commented 2 days ago

Nice. But be warned: tools are great but stupid… ;)

zonkmachine commented 2 days ago

so you don't need to do anything.

Right, sorry! I should have read the whole thread, obviously, before manually fixing strings. I solved some 4-5 cases before noticing this part. I hope this doesn't create any problems for the script.

impaktor commented 1 day ago

before manually fixing strings

@zonkmachine no worries. You might have been on to something...

But be warned: tools are great but stupid… ;)

@JeromeChignoli Indeed. See below:

1. Where we stand

I've done some more tinkering, and looked more at the output, and reached the conclusion: there be complications. the TL;DR, I could just compile a list of errors from each language and send that out to the translators, and "pretty please fix"-them, or we just brute force the fixes, and nuke 95% of the errors, in my guesstimation.

2. Edge cases

Below are some edge cases that make it challenging to (correctly) automate fixing in script.

2.1 "Not even wrong"

...to quote Wolfgang Pauli. This is going to be tough to fix in script

Checking file: data/lang/module-searchrescue/pl.json FAIL:
ERROR:   {'RESULT_DELIVERY_COMM': ['{done}', '{todo{ ton {cargotype}']}
correct: {'RESULT_DELIVERY_COMM': ['{done}', '{todo}', '{cargotype}']}
ERROR:   {'RESULT_PICKUP_COMM': ['{done}', '{todo{ ton {cargotype}']}
correct: {'RESULT_PICKUP_COMM': ['{done}', '{todo}', '{cargotype}']}
erros: 2, warnings: 0

or here } vs ):

Checking file: data/lang/module-combat/pl.json FAIL:
ERROR:   {'POLICE_2': ['{org}', '{cash}', '{system}', '{sectorx}', '{sectory}', '{sectorz}', '{area). Potrzebujesz hipernapędu zdolnego pokonać odległość {dist}']}
correct: {'POLICE_2': ['{org}', '{cash}', '{system}', '{sectorx}', '{sectory}', '{sectorz}', '{area}', '{dist}']}

or missing closing bracket all together:

Checking file: data/lang/module-combat/pl.json FAIL:
ERROR:   {'POLICE_1': ['{area}', '{system}', '{sectorx}', '{sectory}', '{sectorz}', '{dist}', '{cash na misję w {area}']}
correct: {'POLICE_1': ['{area}', '{system}', '{sectorx}', '{sectory}', '{sectorz}', '{dist}', '{cash}', '{area}']}

maybe above warrants some regex magic to detect? (all three examples from polish).

2.2 False positives?

Below, the percentage sign is lacking a space, thus being interpreted as a C-variable string by my script (variables from C++ code:foo %my_variable bar, variables from Lua code: foo {my_variable} bar), and we have several of these from Chinese (Mandarin?). I assume this will not be a problem in the game (unless this happens to be a string where we're trying to substitute another variable from C++, I suspect)

Checking file: data/lang/ui-core/ja.json FAIL:
ERROR:   {'YOUR_HULL_IS_AT_X_INTEGRITY': ['{value}', '%の強度です']}
correct: {'YOUR_HULL_IS_AT_X_INTEGRITY': ['{value}']}

2.3 Assume there be order

Below is probably fine (thus script only considers it as "warning"), but I if the variables also had been wrong (e.g. translated), then I would replace them assuming the order would be the same as in the English string. This is not an issue when the string only has a single {variable}, but most strings (with errors at least) contain multiple variables. I don't see a way around this without manual intervention (or some fancy-schmancy stuff as I suggest in "conclusions" section below).

Checking file: data/lang/module-system/ru.json FAIL: 
WARNING: {'DISCOVERED_HIDDEN_BASES': ['{bases}', '{portcount}']} 
correct: {'DISCOVERED_HIDDEN_BASES': ['{portcount}', '{bases}']} 
erros: 0, warnings: 1 

(Seems like like German (to no surprise) and Russian often swaps order of variables)

2.4 Can't even handle the error

Below, number of strings is mismatched between English and translated. This might be because the string is foo instead of {foo} or %foo, thus the script isn't (currently) detecting the string (it only keeps strings with variable substitutions in them).

Checking file: data/lang/ui-core/ar.json FAIL:
ERROR: mismatching keys, probably missing required {variable} all together

Checking file: data/lang/ui-core/hu.json FAIL:
ERROR: mismatching keys, probably missing required {variable} all together

Checking file: data/lang/module-taxi/id.json FAIL:
ERROR: mismatching keys, probably missing required {variable} all together

3 Conclusion

I think 2.3 is a very (imagined?) edge case, and we could just ignore it, I think the script would do the right thing 95 % of the time, and the translations would be less wrongier than before (but now the error might be so subtle as to be not obviously noticeable in game play, making the translation "bug" more deceptive?).

One could also measure some kind of "distance" (character Hamming distance, or word2vec embedding space, or LLM) between the wrong and correct variable, for most cases the wrong and correct are quite close, either because they're:

  1. misspelled
  2. translated to other Germanic / Latin language close to English
  3. accidentally capitalized / upper cased
  4. copy-paste error (e.g. {sextorx}, {sextory}, {sextory})

As teased in the Introduction, we could ask translators to do the work for us, and we'll see where that gets us. (Also: I'm yet to figure out how to implement the regex string subsitution from the list of correct variables)

JeromeChignoli commented 1 day ago

Said differently: only about 5% of the messages need a human correction. A tool displaying the correct and the incorrect strings side by side, highlighting detected {keys} and « {, } or % » tags, english key_name…

zonkmachine commented 21 hours ago

the TL;DR, I could just compile a list of errors from each language and send that out to the translators, and "pretty please fix"-them, or we just brute force the fixes, and nuke 95% of the errors, in my guesstimation.

I would rather inform the translators.

JeromeChignoli commented 3 hours ago

Maybe it is too late, i writed a bash script (sorry to not be python aware). I dont know if it may be of some utility, it is slow, ugly writed, it cant log colors, but it seems to highlight some more ways to fix in the console. [findTheBadKeys.sh.txt]

EDIT: Ooops wrong buggy script. updated findTheBadKeys2.sh.txt