@elite-dangerous-almanac/core 0.2.8 → 0.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/PROVENANCE/astro/SOURCES.md +13 -12
  2. package/PROVENANCE/commodities/SOURCES.md +50 -6
  3. package/PROVENANCE/equipment/SOURCES.md +98 -20
  4. package/PROVENANCE/i18n/SOURCES.md +186 -80
  5. package/PROVENANCE/ships/SOURCES.md +344 -200
  6. package/README.md +10 -2
  7. package/THIRD_PARTY_NOTICES.md +11 -3
  8. package/dist/astro/body-rings.d.ts +2 -2
  9. package/dist/astro/codex-region-lookup.d.ts +1 -1
  10. package/dist/astro/codex-region-lookup.js +1 -1
  11. package/dist/astro/hand-authored-regions.d.ts +1 -1
  12. package/dist/astro/index.d.ts +1 -1
  13. package/dist/astro/index.js +1 -1
  14. package/dist/astro/naming-region-origins.d.ts +1 -1
  15. package/dist/astro/naming-region-origins.js +1 -1
  16. package/dist/astro/nebulae-all.d.ts +4 -6
  17. package/dist/astro/nebulae-all.js +1 -1
  18. package/dist/astro/nebulae-all.js.map +1 -1
  19. package/dist/astro/nebulae-planetary.d.ts +4 -5
  20. package/dist/astro/nebulae-planetary.js +1 -1
  21. package/dist/astro/nebulae-procgen.d.ts +3 -3
  22. package/dist/astro/nebulae-real.d.ts +3 -3
  23. package/dist/astro/nebulae.d.ts +8 -8
  24. package/dist/astro/permit-locked-regions.d.ts +2 -2
  25. package/dist/astro/permit-locked-systems.d.ts +1 -1
  26. package/dist/astro/permit-locks.d.ts +2 -2
  27. package/dist/astro/procedural-system.d.ts +3 -3
  28. package/dist/astro/procedural-system.js +1 -1
  29. package/dist/astro/system-address.d.ts +1 -1
  30. package/dist/astro/system-address.js +1 -1
  31. package/dist/astro/system-name.js +1 -1
  32. package/dist/{chunk-XSLPWM5N.js → chunk-2J6NNI3Y.js} +1 -1
  33. package/dist/{chunk-DWRNXUAX.js → chunk-2KIZN3BY.js} +1 -1
  34. package/dist/{chunk-J7BM5NGK.js → chunk-2TY42PTF.js} +1 -1
  35. package/dist/{chunk-773VO2GK.js → chunk-4T3TTYUT.js} +1 -1
  36. package/dist/{chunk-773VO2GK.js.map → chunk-4T3TTYUT.js.map} +1 -1
  37. package/dist/{chunk-W5ULI75F.js → chunk-7C7NJWCF.js} +1 -1
  38. package/dist/{chunk-W5ULI75F.js.map → chunk-7C7NJWCF.js.map} +1 -1
  39. package/dist/{chunk-IMNOEFUE.js → chunk-7Y5EK2VO.js} +1 -1
  40. package/dist/{chunk-IMNOEFUE.js.map → chunk-7Y5EK2VO.js.map} +1 -1
  41. package/dist/{chunk-2OBUSQA7.js → chunk-AAU7OM47.js} +1 -1
  42. package/dist/{chunk-2OBUSQA7.js.map → chunk-AAU7OM47.js.map} +1 -1
  43. package/dist/{chunk-GIGRBFIJ.js → chunk-AC3U7LRK.js} +1 -1
  44. package/dist/{chunk-GIGRBFIJ.js.map → chunk-AC3U7LRK.js.map} +1 -1
  45. package/dist/{chunk-BJU27V6C.js → chunk-AUBV6S7V.js} +1 -1
  46. package/dist/{chunk-BJU27V6C.js.map → chunk-AUBV6S7V.js.map} +1 -1
  47. package/dist/{chunk-DI5RXSJR.js → chunk-BVLBS2QY.js} +1 -1
  48. package/dist/{chunk-DI5RXSJR.js.map → chunk-BVLBS2QY.js.map} +1 -1
  49. package/dist/{chunk-IN36YSS4.js → chunk-C3YZ5KTA.js} +1 -1
  50. package/dist/{chunk-IN36YSS4.js.map → chunk-C3YZ5KTA.js.map} +1 -1
  51. package/dist/{chunk-6UNAD74Z.js → chunk-C4FUV6GF.js} +1 -1
  52. package/dist/{chunk-6UNAD74Z.js.map → chunk-C4FUV6GF.js.map} +1 -1
  53. package/dist/chunk-CEF7SMB2.js +1 -0
  54. package/dist/chunk-CEF7SMB2.js.map +1 -0
  55. package/dist/chunk-E2HDF6PJ.js +1 -0
  56. package/dist/chunk-E2HDF6PJ.js.map +1 -0
  57. package/dist/{chunk-OFZGNWBT.js → chunk-ETREYN5U.js} +1 -1
  58. package/dist/{chunk-OFZGNWBT.js.map → chunk-ETREYN5U.js.map} +1 -1
  59. package/dist/{chunk-KBCA4GEZ.js → chunk-FP2TQJZP.js} +1 -1
  60. package/dist/{chunk-YJAH6DFY.js → chunk-G7WARJ3X.js} +1 -1
  61. package/dist/chunk-G7WARJ3X.js.map +1 -0
  62. package/dist/{chunk-Z4OUB4SJ.js → chunk-GLTCCDN5.js} +1 -1
  63. package/dist/{chunk-Z4OUB4SJ.js.map → chunk-GLTCCDN5.js.map} +1 -1
  64. package/dist/chunk-GVNTKCVF.js +1 -0
  65. package/dist/chunk-GVNTKCVF.js.map +1 -0
  66. package/dist/{chunk-Q6YDPREF.js → chunk-GZLD7RTK.js} +1 -1
  67. package/dist/{chunk-Q6YDPREF.js.map → chunk-GZLD7RTK.js.map} +1 -1
  68. package/dist/{chunk-SC4MEHVY.js → chunk-HIJR7DOC.js} +1 -1
  69. package/dist/{chunk-SC4MEHVY.js.map → chunk-HIJR7DOC.js.map} +1 -1
  70. package/dist/{chunk-ETWMPMZP.js → chunk-K5JK3XQB.js} +1 -1
  71. package/dist/{chunk-GRIK3EDH.js → chunk-KY7KSPU6.js} +1 -1
  72. package/dist/{chunk-GRIK3EDH.js.map → chunk-KY7KSPU6.js.map} +1 -1
  73. package/dist/{chunk-EHFHRQEP.js → chunk-M4STXLXO.js} +1 -1
  74. package/dist/{chunk-EHFHRQEP.js.map → chunk-M4STXLXO.js.map} +1 -1
  75. package/dist/{chunk-5YEHJM6V.js → chunk-OSMBAFRW.js} +1 -1
  76. package/dist/{chunk-5YEHJM6V.js.map → chunk-OSMBAFRW.js.map} +1 -1
  77. package/dist/chunk-PIU24HRN.js +1 -0
  78. package/dist/chunk-PIU24HRN.js.map +1 -0
  79. package/dist/{chunk-ELT3FEA4.js → chunk-PKKBYBL4.js} +1 -1
  80. package/dist/{chunk-ELT3FEA4.js.map → chunk-PKKBYBL4.js.map} +1 -1
  81. package/dist/{chunk-6HMIF2RJ.js → chunk-Q647OXON.js} +1 -1
  82. package/dist/{chunk-6HMIF2RJ.js.map → chunk-Q647OXON.js.map} +1 -1
  83. package/dist/{chunk-BMQM4JBL.js → chunk-QPT2WJYN.js} +1 -1
  84. package/dist/{chunk-BMQM4JBL.js.map → chunk-QPT2WJYN.js.map} +1 -1
  85. package/dist/{chunk-3WGXGBW5.js → chunk-R2AEZYX7.js} +1 -1
  86. package/dist/{chunk-FJIWJYKO.js → chunk-RA4YJBU5.js} +1 -1
  87. package/dist/chunk-RA4YJBU5.js.map +1 -0
  88. package/dist/{chunk-MRLUWHGI.js → chunk-RJ3ZLQRB.js} +1 -1
  89. package/dist/{chunk-MRLUWHGI.js.map → chunk-RJ3ZLQRB.js.map} +1 -1
  90. package/dist/chunk-SFEQXUIA.js +1 -0
  91. package/dist/{chunk-WV7QCDL5.js → chunk-SIL356HB.js} +1 -1
  92. package/dist/{chunk-WV7QCDL5.js.map → chunk-SIL356HB.js.map} +1 -1
  93. package/dist/{chunk-OLKOWR7S.js → chunk-SS7HVNP5.js} +1 -1
  94. package/dist/{chunk-OLKOWR7S.js.map → chunk-SS7HVNP5.js.map} +1 -1
  95. package/dist/chunk-TRGHPX2O.js +1 -0
  96. package/dist/chunk-TRGHPX2O.js.map +1 -0
  97. package/dist/{chunk-GMTAFUAG.js → chunk-TYRH73MO.js} +1 -1
  98. package/dist/{chunk-GMTAFUAG.js.map → chunk-TYRH73MO.js.map} +1 -1
  99. package/dist/{chunk-7TVFV3VO.js → chunk-U3IRMXMR.js} +1 -1
  100. package/dist/{chunk-A7IVMYNF.js → chunk-U73MBQ45.js} +1 -1
  101. package/dist/{chunk-A7IVMYNF.js.map → chunk-U73MBQ45.js.map} +1 -1
  102. package/dist/{chunk-IZIIGK3W.js → chunk-UE22QU7A.js} +1 -1
  103. package/dist/{chunk-IZIIGK3W.js.map → chunk-UE22QU7A.js.map} +1 -1
  104. package/dist/{chunk-DBDCOHI4.js → chunk-UI5RROGI.js} +1 -1
  105. package/dist/{chunk-DBDCOHI4.js.map → chunk-UI5RROGI.js.map} +1 -1
  106. package/dist/chunk-URRPEUIK.js +1 -0
  107. package/dist/{chunk-QJECDMQQ.js.map → chunk-URRPEUIK.js.map} +1 -1
  108. package/dist/chunk-UTWZZOSA.js +1 -0
  109. package/dist/chunk-UTWZZOSA.js.map +1 -0
  110. package/dist/chunk-UVX7RCMP.js +1 -0
  111. package/dist/chunk-UVX7RCMP.js.map +1 -0
  112. package/dist/{chunk-7ATBEOVC.js → chunk-WG4DPXJI.js} +1 -1
  113. package/dist/{chunk-XFDMCPDW.js → chunk-WZIBBJHA.js} +1 -1
  114. package/dist/{chunk-XFDMCPDW.js.map → chunk-WZIBBJHA.js.map} +1 -1
  115. package/dist/{chunk-7EWZGDWY.js → chunk-X3MXPE7G.js} +1 -1
  116. package/dist/{chunk-7EWZGDWY.js.map → chunk-X3MXPE7G.js.map} +1 -1
  117. package/dist/{chunk-JCYOE3C4.js → chunk-XQJERZUS.js} +1 -1
  118. package/dist/{chunk-JCYOE3C4.js.map → chunk-XQJERZUS.js.map} +1 -1
  119. package/dist/{chunk-SD6GNFDX.js → chunk-YBE5M27G.js} +1 -1
  120. package/dist/{chunk-SD6GNFDX.js.map → chunk-YBE5M27G.js.map} +1 -1
  121. package/dist/chunk-ZBUTGTZ3.js +1 -0
  122. package/dist/chunk-ZBUTGTZ3.js.map +1 -0
  123. package/dist/commodities/commodities-all.d.ts +2 -2
  124. package/dist/commodities/commodities-all.js +1 -1
  125. package/dist/commodities/commodities-rare.d.ts +3 -4
  126. package/dist/commodities/commodities-rare.js +1 -1
  127. package/dist/commodities/commodities-standard.d.ts +7 -7
  128. package/dist/commodities/commodities-standard.js +1 -1
  129. package/dist/commodities/commodities.d.ts +12 -12
  130. package/dist/commodities/commodities.js +1 -1
  131. package/dist/commodities/index.js +1 -1
  132. package/dist/equipment/engineering.d.ts +11 -6
  133. package/dist/equipment/engineering.js +1 -1
  134. package/dist/equipment/index.d.ts +4 -4
  135. package/dist/equipment/index.js +1 -1
  136. package/dist/equipment/modification-journal.js +1 -1
  137. package/dist/equipment/modifications.d.ts +23 -14
  138. package/dist/equipment/modifications.js +1 -1
  139. package/dist/equipment/suits.d.ts +2 -145
  140. package/dist/equipment/suits.js +1 -1
  141. package/dist/equipment/tools.d.ts +102 -0
  142. package/dist/equipment/tools.js +1 -0
  143. package/dist/equipment/tools.js.map +1 -0
  144. package/dist/equipment/upgrade-costs.d.ts +2 -3
  145. package/dist/equipment/upgrade-costs.js +1 -1
  146. package/dist/equipment/weapons.d.ts +2 -135
  147. package/dist/equipment/weapons.js +1 -1
  148. package/dist/i18n/blueprints.d.ts +2 -3
  149. package/dist/i18n/blueprints.js +1 -1
  150. package/dist/i18n/commodities.d.ts +36 -0
  151. package/dist/i18n/commodities.js +1 -0
  152. package/dist/i18n/commodities.js.map +1 -0
  153. package/dist/i18n/experimental-effect-descriptions.d.ts +5 -6
  154. package/dist/i18n/experimental-effect-descriptions.js +1 -1
  155. package/dist/i18n/experimental-effects.d.ts +2 -3
  156. package/dist/i18n/experimental-effects.js +1 -1
  157. package/dist/i18n/index.d.ts +19 -9
  158. package/dist/i18n/index.js +1 -1
  159. package/dist/i18n/materials.d.ts +2 -4
  160. package/dist/i18n/materials.js +1 -1
  161. package/dist/i18n/micro-resources.d.ts +2 -4
  162. package/dist/i18n/micro-resources.js +1 -1
  163. package/dist/i18n/module-families.d.ts +3 -5
  164. package/dist/i18n/module-families.js +1 -1
  165. package/dist/i18n/modules.d.ts +3 -6
  166. package/dist/i18n/modules.js +1 -1
  167. package/dist/i18n/personal-modifications.d.ts +4 -6
  168. package/dist/i18n/personal-modifications.js +1 -1
  169. package/dist/i18n/personal-tools.d.ts +33 -0
  170. package/dist/i18n/personal-tools.js +1 -0
  171. package/dist/i18n/personal-tools.js.map +1 -0
  172. package/dist/i18n/personal-weapons.d.ts +3 -4
  173. package/dist/i18n/personal-weapons.js +1 -1
  174. package/dist/i18n/pre-engineered.d.ts +1 -1
  175. package/dist/i18n/slots.d.ts +2 -2
  176. package/dist/i18n/suits.d.ts +36 -6
  177. package/dist/i18n/suits.js +1 -1
  178. package/dist/materials/index.d.ts +4 -3
  179. package/dist/materials/index.js +1 -1
  180. package/dist/materials/materials-all.d.ts +2 -2
  181. package/dist/materials/materials-all.js +1 -1
  182. package/dist/materials/materials-raw.d.ts +3 -4
  183. package/dist/materials/materials-raw.js +1 -1
  184. package/dist/materials/materials.d.ts +18 -15
  185. package/dist/materials/materials.js +1 -1
  186. package/dist/materials/micro-resources-all.d.ts +2 -2
  187. package/dist/materials/micro-resources-all.js +1 -1
  188. package/dist/materials/micro-resources-component.d.ts +2 -2
  189. package/dist/materials/micro-resources-consumable.d.ts +2 -2
  190. package/dist/materials/micro-resources-data.d.ts +2 -2
  191. package/dist/materials/micro-resources-item.d.ts +2 -2
  192. package/dist/materials/micro-resources.d.ts +17 -14
  193. package/dist/materials/micro-resources.js +1 -1
  194. package/dist/ships/ammunition.d.ts +4 -4
  195. package/dist/ships/blueprint-costs.d.ts +13 -13
  196. package/dist/ships/blueprint-costs.js +1 -1
  197. package/dist/ships/blueprint-journal.d.ts +3 -3
  198. package/dist/ships/blueprint-journal.js +1 -1
  199. package/dist/ships/blueprints.d.ts +3 -3
  200. package/dist/ships/build-metrics.d.ts +2 -1
  201. package/dist/ships/build-metrics.js +1 -1
  202. package/dist/ships/default-loadouts.d.ts +2 -3
  203. package/dist/ships/default-loadouts.js +1 -1
  204. package/dist/ships/engineering-options.d.ts +29 -32
  205. package/dist/ships/engineering-options.js +1 -1
  206. package/dist/ships/engineering.d.ts +1 -2
  207. package/dist/ships/engineering.js +1 -1
  208. package/dist/ships/experimental-effect-costs.d.ts +1 -1
  209. package/dist/ships/gunsights.d.ts +3 -3
  210. package/dist/ships/heat.d.ts +1 -1
  211. package/dist/ships/index.d.ts +4 -5
  212. package/dist/ships/index.js +1 -1
  213. package/dist/ships/loadout-validation.d.ts +1 -1
  214. package/dist/ships/module-families.d.ts +1 -1
  215. package/dist/ships/modules-all.d.ts +2 -3
  216. package/dist/ships/modules-all.js +1 -1
  217. package/dist/ships/modules-core.d.ts +3 -3
  218. package/dist/ships/modules-hardpoint.d.ts +4 -5
  219. package/dist/ships/modules-hardpoint.js +1 -1
  220. package/dist/ships/modules-internal.d.ts +5 -6
  221. package/dist/ships/modules-internal.js +1 -1
  222. package/dist/ships/modules-utility.d.ts +3 -4
  223. package/dist/ships/modules-utility.js +1 -1
  224. package/dist/ships/modules.d.ts +26 -24
  225. package/dist/ships/modules.js +1 -1
  226. package/dist/ships/pre-engineered-stats.d.ts +1 -1
  227. package/dist/ships/pre-engineered-stats.js +1 -1
  228. package/dist/ships/pre-engineered.d.ts +9 -10
  229. package/dist/ships/pre-engineered.js +1 -1
  230. package/dist/ships/shield-capacitor.js +1 -1
  231. package/dist/ships/ship-loadout.d.ts +7 -7
  232. package/dist/ships/ship-loadout.js +1 -1
  233. package/dist/ships/ships.d.ts +1 -2
  234. package/dist/ships/ships.js +1 -1
  235. package/dist/ships/slots.d.ts +5 -5
  236. package/dist/ships/weapons.js +1 -1
  237. package/dist/suits-B37rAORs.d.ts +414 -0
  238. package/dist/{system-address-cyJaeZIS.d.ts → system-address-DmzXRD48.d.ts} +6 -4
  239. package/package.json +13 -1
  240. package/dist/chunk-77TT4K53.js +0 -1
  241. package/dist/chunk-DAQ3PJ4R.js +0 -1
  242. package/dist/chunk-DAQ3PJ4R.js.map +0 -1
  243. package/dist/chunk-DHACRCLI.js +0 -1
  244. package/dist/chunk-DHACRCLI.js.map +0 -1
  245. package/dist/chunk-FJIWJYKO.js.map +0 -1
  246. package/dist/chunk-IUSMAX5T.js +0 -1
  247. package/dist/chunk-IUSMAX5T.js.map +0 -1
  248. package/dist/chunk-LWNBWRKL.js +0 -1
  249. package/dist/chunk-LWNBWRKL.js.map +0 -1
  250. package/dist/chunk-MT5AHPNP.js +0 -1
  251. package/dist/chunk-MT5AHPNP.js.map +0 -1
  252. package/dist/chunk-QJECDMQQ.js +0 -1
  253. package/dist/chunk-YJAH6DFY.js.map +0 -1
  254. /package/dist/{chunk-XSLPWM5N.js.map → chunk-2J6NNI3Y.js.map} +0 -0
  255. /package/dist/{chunk-DWRNXUAX.js.map → chunk-2KIZN3BY.js.map} +0 -0
  256. /package/dist/{chunk-J7BM5NGK.js.map → chunk-2TY42PTF.js.map} +0 -0
  257. /package/dist/{chunk-KBCA4GEZ.js.map → chunk-FP2TQJZP.js.map} +0 -0
  258. /package/dist/{chunk-ETWMPMZP.js.map → chunk-K5JK3XQB.js.map} +0 -0
  259. /package/dist/{chunk-3WGXGBW5.js.map → chunk-R2AEZYX7.js.map} +0 -0
  260. /package/dist/{chunk-77TT4K53.js.map → chunk-SFEQXUIA.js.map} +0 -0
  261. /package/dist/{chunk-7TVFV3VO.js.map → chunk-U3IRMXMR.js.map} +0 -0
  262. /package/dist/{chunk-7ATBEOVC.js.map → chunk-WG4DPXJI.js.map} +0 -0
@@ -1,9 +1,10 @@
1
1
  # Localized game-name catalogues
2
2
 
3
- These catalogues keep the canonical English display names already published by the ships
4
- and equipment data domains and add only localized values carried explicitly by accepted
5
- sources. Where a catalogue holds display prose rather than a name, the owning domain
6
- publishes no English for it and all six values are the source's own.
3
+ These catalogues keep the canonical English display names already published by the
4
+ ships, equipment, materials and commodities data domains and add only localized values
5
+ carried explicitly by accepted sources. Where a catalogue holds display prose rather
6
+ than a name, the owning domain publishes no English for it and all six values are the
7
+ source's own.
7
8
  They are deliberately sparse: absence means that no accepted source carried a value, and
8
9
  the lookup API returns `null` for that locale rather than treating English as a
9
10
  translation.
@@ -28,27 +29,34 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
28
29
  - **Acquired:** 2026-08-30 UTC.
29
30
  - **In-game localisation revision:** none published; the game ships no immutable
30
31
  identifier for its localisation tables. The acquired table is the evidence.
31
- - **Derivation:** all 1,194 current module symbols and English names come from the four
32
+ - **Derivation:** every current module symbol and English name comes from the four
32
33
  `data/ships/modules-*.jsonc` catalogues, which stay authoritative for canonical
33
34
  English. Each symbol joins case-insensitively to the in-game module localisation
34
35
  identity, which carries a `name`, a `longname` and an `info` string per locale. The
35
- join is exact and total: every one of the 1,194 resolves.
36
+ join is exact and total over the symbols the acquired table covers: every one of them
37
+ resolves. The **unreleased** Large Planetary Vehicle Hangars postdate that table
38
+ (§`data/ships/SOURCES.md`) and are joined to a later observation of the same
39
+ localisation identities instead, acquired 2026-09-02 UTC: it names
40
+ `Int_LargeBuggyBay_Size{2,4,6}_Class3` and their `_Free` twins in all six locales. It
41
+ does not name the Mk II line, whose three records carry English alone.
36
42
  - **`longname` is the name taken.** It is the outfitting list's full name and equals
37
43
  the canonical English on 1,041 of the symbols, where `name` — the abbreviated panel
38
44
  form — equals it on 726. **Both totals were counted over the 1,199-symbol set that
39
45
  preceded the removal of the five plain size-8 drives (§`data/ships/SOURCES.md`), and
40
46
  are not re-derived here:** the in-game localisation table is not vendored, so whether
41
47
  those five sat inside either total cannot be checked from this repository. Read them
42
- as upper bounds over 1,194 symbols until the table is re-acquired. `name` is taken
48
+ as upper bounds over the current symbol set until the table is re-acquired. `name` is taken
43
49
  only where a longname is a template rather than a name, which is the cargo racks,
44
50
  fuel tanks and corrosion-resistant racks whose longname carries a capacity.
45
51
  - **Aliasing is followed.** A localisation value may be a `$Other_Key;` pointer rather
46
52
  than text; roughly three thousand of the keys are. Each is followed to the entry
47
53
  holding real text before anything is stored, and a value still carrying a `$` token
48
54
  after that is not a name and is rejected.
49
- - **The `(Free)` vessel-hangar grants have no name of their own** — theirs is a
50
- template wrapping the base hangar's. Their canonical English is already the base
51
- module's, so they share its record.
55
+ - **The `(Free)` grants have no name of their own** — theirs is a template wrapping the
56
+ base module's. Their canonical English is already the base module's, so they share
57
+ its record. This covers the six Vessel Hangar grants and the three unreleased Large
58
+ Planetary Vehicle Hangar grants, observed as "Large Planetary Vehicle Hangar (Free)"
59
+ and its five translations — each the base name plus a rendered marker.
52
60
  - **The in-game table is authoritative over the EDDI and EDSY joins.** It carries 349
53
61
  values absent from those registries and differs from them in 3,135 cells across 324
54
62
  distinct record-and-locale pairs: 73 differ only in letter case, 10 only in punctuation
@@ -67,19 +75,37 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
67
75
  `Elektr. Gegenmaßnahmen`. **Ten values remain abbreviated** because no source spells
68
76
  them out — the Mk II gravity-optimised thrusters in four locales, the Advanced
69
77
  Planetary Approach Suite in three, and three others — and there the alternative is a
70
- bare `Schubdüsen` or `Propulseurs` that loses what distinguishes the module.
78
+ bare `Schubdüsen` or `Propulseurs` that loses what distinguishes the module. The
79
+ unreleased Large Planetary Vehicle Hangar's Russian
80
+ `Крупный гараж для планет. транспорта` joins them: its `планет.` is the only spelling
81
+ observed, and expanding it to match the shipped hangar's `планетарного` would be this
82
+ repository writing the translation rather than reading it.
71
83
  - **A rendered capacity or grant marker is not a name.** A longname may carry a module's
72
84
  own capacity or a `(Free)` marker — `Anti-Korrosions-Frachtgestell (KAP.: 1)` — which
73
85
  describes one module rather than naming the family, so it is rejected and the source's
74
86
  other field is read instead.
75
87
  - **One record per canonical English name.** Where the source distinguishes in another
76
88
  locale what English spells the same way, the reading most symbols share is stored:
77
- `Lightweight Alloy` and `Reinforced Alloy` are singular on 25 hulls and plural on the
89
+ `Lightweight Alloy` and `Reinforced Alloy` are singular on most hulls and plural on the
78
90
  rest, and the singular is kept, which is also the number the English carries.
79
- `Hatch Breaker Limpet Controller` is specific on twenty symbols and generic on one, and
91
+ `Hatch Breaker Limpet Controller` is specific on most symbols and generic on one, and
80
92
  the specific is kept.
81
- - **Coverage:** complete. All 1,194 symbols carry all six locales.
82
- - **Manual corrections:** none.
93
+ - **Coverage:** complete. Every symbol carries all six locales — but five of those
94
+ values are **constructed rather than read**; see the manual correction below.
95
+ - **Manual corrections:** the **Mk II** Large Planetary Vehicle Hangar's five non-English
96
+ names are built, not sourced. Nothing acquired names that unreleased module in any
97
+ locale but English, and rather than leave the lookups answering `null` the repository
98
+ owner chose to form each as the plain hangar's own translation with `Mk II` appended —
99
+ `Großer Planetenfahrzeug-Hangar Mk II`, `Hangar de vehículo planetario Mk II`,
100
+ `Grand hangar des véhicules planétaires Mk II`,
101
+ `Hangar de veículo planetário grande Mk II`,
102
+ `Крупный гараж для планет. транспорта Mk II`. Four locales have a precedent for that
103
+ shape in the shipped Mk II Vessel Hangar and Mk II Cargo Rack, which suffix `Mk II`;
104
+ **German does not** — Frontier writes `Mk-II-Schiffshangar` for the hangar and
105
+ `Frachtgestell für Mk II` for the rack, so the German value here matches neither and is
106
+ the likeliest of the five to be wrong. All five are to be replaced by a real
107
+ localisation reading on release, and none should be treated as evidence of what
108
+ Frontier publishes. #16 tracks them with the records themselves.
83
109
 
84
110
  ## `blueprint-names.jsonc`
85
111
 
@@ -88,11 +114,11 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
88
114
  database version `424009901`, last-modified marker `20260810`.
89
115
  - **In-game localisation revision:** none published; the game ships no immutable
90
116
  identifier for its localisation tables. The acquired table is the evidence.
91
- - **Derivation:** each of the 107 current keys and its English name comes from
117
+ - **Derivation:** each current key and its English name comes from
92
118
  `data/ships/blueprints.jsonc`. Names remain keyed per blueprint because a single
93
119
  English phrase can have different grammatical translations for different module
94
120
  families. The Frontier symbol joins case-insensitively to the in-game modification
95
- name table, which supplies every locale for the 90 recipes it names. The remaining 17
121
+ name table, which supplies every locale for the recipes it names. The rest
96
122
  are ids this repository keys separately because their numbers differ, where the game
97
123
  offers only the generic recipe's menu entry and so publishes only its name: each takes
98
124
  the locales of the generic id it shadows — `AFM_Shielded`, `Refineries_Shielded` and
@@ -106,7 +132,7 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
106
132
  canonical name is kept, as it is for every other blueprint. Where EDSY and the in-game
107
133
  table disagree the in-game value is kept, as everywhere else in this repository: it
108
134
  differs for ten values across four locales, all of them wording, none of them meaning.
109
- - **Coverage:** complete. All 107 blueprints carry all six locales.
135
+ - **Coverage:** complete. Every blueprint carries all six locales.
110
136
  - **Manual corrections:** two values in the in-game table carry a stray leading or
111
137
  trailing ASCII space, marked in the acquired table and removed here so a successful
112
138
  lookup is already trimmed like every other catalogue name: French `FSD_FastBoot` (which
@@ -119,10 +145,10 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
119
145
  - **Acquired:** 2026-08-30 UTC.
120
146
  - **In-game localisation revision:** none published; the game ships no immutable
121
147
  identifier for its localisation tables. The acquired table is the evidence.
122
- - **Derivation:** each of the 86 current keys and its English name comes from
148
+ - **Derivation:** each current key and its English name comes from
123
149
  `data/ships/experimental-effects.jsonc`, which stays authoritative for canonical
124
150
  English. The Frontier symbol joins to the in-game experimental-effect name table,
125
- which supplies every locale for all 86. Where it and EDSY disagree, the in-game value
151
+ which supplies every locale for all of them. Where it and EDSY disagree, the in-game value
126
152
  is kept, as everywhere else in this repository. It supplies six values EDSY does not
127
153
  carry — all five non-English `special_super_penetrator` names and the German
128
154
  `special_weapon_rateoffire` — and changes two EDSY already carried: German
@@ -134,7 +160,7 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
134
160
  `special_super_penetrator_cooled` are pre-engineered rail-gun variants the game does
135
161
  not name separately, so the source marks them as carrying the base effect's entry.
136
162
  Each takes those values, exactly as a shadowing blueprint id takes its generic's.
137
- - **Coverage:** complete. All 86 effects carry all six locales.
163
+ - **Coverage:** complete. Every effect carries all six locales.
138
164
  - **Manual corrections:** the source appends a `†` to every marked cell of the three
139
165
  `_cooled` variants above; it is the acquisition's own shadow marker rather than part of
140
166
  a name, and is removed here.
@@ -144,7 +170,7 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
144
170
  - **Acquired:** 2026-08-16 UTC.
145
171
  - **Odyssey Materials Helper revision:** commit
146
172
  `23343c453938e724f317c56e9eb7db0dbfa71f78`.
147
- - **Derivation:** each of the 146 current symbols and its canonical English name comes
173
+ - **Derivation:** each current symbol and its canonical English name comes
148
174
  from the three `data/materials/materials-*.jsonc` catalogues. The lower-cased symbol
149
175
  joins directly to the final component of Odyssey Materials Helper's message key in
150
176
  `locale/material/horizons/{raw,manufactured,encoded}.csv`; only that row's explicit
@@ -155,14 +181,14 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
155
181
  source values.
156
182
  - **Second source, the in-game material localisation tables**, acquired 2026-08-30 UTC;
157
183
  the game publishes no immutable identifier for them, so the acquired table is the
158
- evidence. It covers all 146 materials in all six locales and, as everywhere else in
159
- this repository, wins where the two disagree. That fills the 30 values Odyssey
160
- Materials Helper did not carry and restyles 30 it did: 23 are the French apostrophe
184
+ evidence. It covers every material in all six locales and, as everywhere else in
185
+ this repository, wins where the two disagree. That fills the values Odyssey Materials
186
+ Helper did not carry and restyles others it did: most are the French apostrophe
161
187
  (the in-game tables use `'` throughout, as every other catalogue here does, where
162
- Odyssey Materials Helper uses `’`), five are Spanish names the helper title-cased
188
+ Odyssey Materials Helper uses `’`), the next largest group is Spanish names the helper title-cased
163
189
  (`Fragmento Caústico` against the game's `Fragmento cáustico`), and the rest are
164
190
  wording.
165
- - **Coverage:** complete. All 146 materials carry all six locales.
191
+ - **Coverage:** complete. Every material carries all six locales.
166
192
  - **Manual corrections:** six of the in-game values are the outfitting UI's own
167
193
  abbreviations, shortened to fit its widget rather than translated differently —
168
194
  `Comp. de destroços Guardian` against the helper's `Componentes de destroços Sentinela
@@ -183,26 +209,26 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
183
209
  `23343c453938e724f317c56e9eb7db0dbfa71f78`.
184
210
  - **Supplemental source:** in-game verification, acquired 2026-08-16 UTC; immutable
185
211
  revision unavailable.
186
- - **Derivation:** each of the 226 current symbols and its canonical English name comes
212
+ - **Derivation:** each current symbol and its canonical English name comes
187
213
  from the four `data/materials/micro-resources-*.jsonc` catalogues. The 196 FDevIDs-backed
188
214
  records join directly to the final component of Odyssey Materials Helper's message key
189
215
  in `locale/material/odyssey/{asset,consumable,data,good}.csv`; only that row's explicit
190
- localized columns are copied. Twenty-eight of the 30 in-game-backed records also have
191
- rows in Odyssey Materials Helper, while `PowerVirus` and
192
- `SmallCapacityPowerRegulator` do not. All 30 take the explicit in-game `name` values for
193
- German, Spanish, French and Russian. In both cases the owning catalogue remains
194
- authoritative for canonical English names.
216
+ localized columns are copied. All but two of the in-game-backed records also have
217
+ rows in Odyssey Materials Helper, the exceptions being `PowerVirus` and
218
+ `SmallCapacityPowerRegulator`. Every in-game-backed record takes the explicit in-game
219
+ `name` values for German, Spanish, French and Russian. In both cases the owning
220
+ catalogue remains authoritative for canonical English names.
195
221
  - **Second source, the in-game micro-resource localisation tables**, acquired
196
222
  2026-08-30 UTC; the game publishes no immutable identifier for them, so the acquired
197
- table is the evidence. It covers 225 of the 226 in all six locales and wins where the
198
- two disagree, on the same footing as the material tables above. That fills all 47
199
- remaining values — including the Brazilian Portuguese for `PowerVirus` and
200
- `SmallCapacityPowerRegulator`, which no registry carries — and restyles 46, of which 36
201
- are the French apostrophe and seven are the French Powerplay term, which the game
223
+ table is the evidence. It covers all but one symbol in all six locales and wins where the
224
+ two disagree, on the same footing as the material tables above. That fills every
225
+ remaining value — including the Brazilian Portuguese for `PowerVirus` and
226
+ `SmallCapacityPowerRegulator`, which no registry carries — and restyles others, mostly
227
+ the French apostrophe and the French Powerplay term, which the game
202
228
  lower-cases (`Données classifiées de puissance`).
203
229
  `PowerMegashipData` is absent from the micro-resource table and appears in the material
204
230
  one; its values are taken from there.
205
- - **Coverage:** complete. All 226 micro resources carry all six locales.
231
+ - **Coverage:** complete. Every micro resource carries all six locales.
206
232
  - **Manual corrections:** five in-game values are layout, not names. Four German
207
233
  consumables carry a `<br>` inside a compound word that the UI wraps —
208
234
  `Energie-<br>zelle`, `Splitter-<br>granate`, `Schild-<br>unterbrecher` and
@@ -223,9 +249,9 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
223
249
  labels are copied verbatim. The join is on family identity rather than on English
224
250
  string equality, because the English column of the in-game table *is* the canonical
225
251
  English name the ships catalogue took from it.
226
- - **Coverage:** English covers all 77 families; the five other locales cover the same 58.
227
- The 19 without a source-backed label are the families the in-game outfitting screen
228
- does not name separately: `axMissileRacks`, `axMultiCannons`, `cargoHatches`,
252
+ - **Coverage:** English covers every family; the five other locales cover only the
253
+ families the in-game outfitting screen names. The families without a source-backed
254
+ label are: `axMissileRacks`, `axMultiCannons`, `cargoHatches`,
229
255
  `causticSinkLaunchers`, `guardianGaussCannons`, `guardianHybridPowerDistributors`,
230
256
  `guardianHybridPowerPlants`, `guardianNaniteTorpedoPylons`, `guardianPlasmaChargers`,
231
257
  `guardianShardCannons`, `guardianShieldReinforcementPackages`,
@@ -239,21 +265,21 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
239
265
  - **Acquired:** 2026-08-30 UTC.
240
266
  - **In-game localisation revision:** none published; the game ships no immutable
241
267
  identifier for its localisation tables. The acquired table is the evidence.
242
- - **Derivation:** each of the 86 current keys comes from
268
+ - **Derivation:** each current key comes from
243
269
  `data/ships/experimental-effects.jsonc`; the Frontier symbol joins to the in-game
244
- experimental-effect description table, which supplies every locale for all 86. All six
245
- values, English included, are the source's verbatim.
246
- - **This catalogue no longer projects the ships catalogue's `description`.** The two
270
+ experimental-effect description table, which supplies every locale for all of them.
271
+ All six values, English included, are the source's verbatim.
272
+ - **This catalogue does not project the ships catalogue's `description`.** The two
247
273
  answer different questions and are deliberately different strings. An effect's
248
274
  `description` in `data/ships/experimental-effects.jsonc` is a mechanical note that
249
275
  states what the `modifiers` list cannot — that High Yield Shell deals 50/50
250
- kinetic/explosive damage with module splash, say — and 57 of the 86 effects need no
276
+ kinetic/explosive damage with module splash, say — and most effects need no
251
277
  such note and carry none. What the game shows a player is display prose that names no
252
278
  magnitudes ("Modified munitions that convert a portion of damage to explosive …"), and
253
279
  it exists for every effect. Projecting one onto the other would have cost the
254
280
  mechanical notes their numbers; storing the display prose here keeps each field doing
255
281
  its own job, and the ships catalogue is unchanged.
256
- - **Coverage:** complete. All 86 effects carry all six locales.
282
+ - **Coverage:** complete. Every effect carries all six locales.
257
283
  - **Manual corrections:** 26 of the source's descriptions begin with one or more
258
284
  bracketed tokens — `[ShieldRegen]`, and `[SnsrBlinding][Heat]` on
259
285
  `special_radiant_canister`. A token is byte-identical across all six locales and is
@@ -264,19 +290,19 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
264
290
  ## `pre-engineered-variant-names.jsonc`
265
291
 
266
292
  - **Acquired:** 2026-08-18 UTC; the Merc-shop names 2026-08-22 UTC.
267
- - **Derivation:** all 76 compound identities and English names come from
293
+ - **Derivation:** every compound identity and English name comes from
268
294
  `data/ships/pre-engineered.jsonc`. An identity combines the base module symbol,
269
295
  blueprint, optional experimental effect and acquisition route. When a variant name
270
296
  exactly matches its base module's canonical name, it reuses that record from
271
- `module-names.jsonc`; the 41 distinct display records are stored once. Fixed reward
297
+ `module-names.jsonc`; each distinct display record is stored once. Fixed reward
272
298
  names such as the three `Decorative_*` festive launchers remain canonical English.
273
- - **The 22 Merc-shop rows carry the shop's own names**, in 14 distinct records — the shop
299
+ - **The Merc-shop rows carry the shop's own names** — the shop
274
300
  sells a "Far-Reaching Abrasion Blaster", not an Abrasion Blaster — so they do not reuse
275
301
  their base module's record. All six locales are supplied by the repository owner from
276
302
  the in-game shop listing; no registry publishes them. The Brazilian Portuguese column
277
303
  was acquired 2026-08-30 UTC and agrees byte-for-byte with the five columns already
278
304
  stored, which it does not change.
279
- - **A tech-broker unlock may carry an unlock marker**, and 19 of them do — see
305
+ - **A tech-broker unlock may carry an unlock marker**, and some do — see
280
306
  `data/ships/SOURCES.md`. Those names are not their base module's, so they do not reuse
281
307
  its record. Where the marker is a manufacturer (`Sirius`, `Azimuth`) or a version
282
308
  (`V1`) it is not a translatable word, so the localized value is that marker composed
@@ -316,7 +342,7 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
316
342
  `data/equipment/suits.jsonc`, which stays authoritative for canonical English. Each
317
343
  family's grade symbols join case-insensitively to the in-game suit localisation
318
344
  identity, which carries a `name`, a `longname` and an `info` string per locale. The
319
- join is exact and total: all 16 grade symbols resolve.
345
+ join is exact and total: every grade symbol resolves.
320
346
  - **`name` is the value taken.** It is the suit's own name and equals the canonical
321
347
  English on all four families.
322
348
  - **The manufacturer is not part of the name.** `longname` prefixes one —
@@ -329,9 +355,10 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
329
355
  byte-identical values in all six locales, so one record is stored per family and
330
356
  `nameKeys` maps the family id and every grade symbol onto it. Both forms a consumer
331
357
  holds therefore resolve: `Suit.family` and the `utilitysuit_class3` a journal line
332
- writes. The flight suit has a single grade whose symbol *is* the family id, so the four
333
- families and 16 grade symbols make 19 distinct identifiers rather than 20.
334
- - **Coverage:** complete. All 19 identifiers carry all six locales.
358
+ writes. The flight suit has a single grade whose symbol *is* the family id, so it
359
+ contributes one identifier where the other families contribute their family id and
360
+ each grade symbol.
361
+ - **Coverage:** complete. Every identifier carries all six locales.
335
362
  - **Two suits are not stored**, because `data/equipment/suits.jsonc` does not carry them:
336
363
  the five `specialistsuit_class{1..5}` grades, which the source does name
337
364
  (`Specialist Suit`, listed as `Remlok Paragon Specialist Suit`), and `hyperspacesuit`,
@@ -353,7 +380,7 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
353
380
  what a suit does — shield strength, battery capacity, the four resistances — and the
354
381
  description answers what it is for, naming no figure at all. Neither is projected onto
355
382
  the other.
356
- - **Coverage:** complete. All 19 identifiers carry all six locales, and every grade of a
383
+ - **Coverage:** complete. Every identifier carries all six locales, and every grade of a
357
384
  family shares its record exactly as in `suit-names.jsonc`.
358
385
  - **The Specialist Suit grades carry no description at all**, which is a second reason
359
386
  they are absent here beyond the owning catalogue not carrying them.
@@ -365,13 +392,13 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
365
392
  - **Acquired:** 2026-09-01 UTC.
366
393
  - **In-game localisation revision:** none published; the game ships no immutable
367
394
  identifier for its localisation tables. The acquired table is the evidence.
368
- - **Derivation:** all 11 current weapon symbols come from `data/equipment/weapons.jsonc`.
395
+ - **Derivation:** every current weapon symbol comes from `data/equipment/weapons.jsonc`.
369
396
  Each joins case-insensitively to the in-game weapon localisation identity and takes its
370
397
  `info` string; the join is exact and total. All six values, English included, are the
371
398
  source's verbatim, because the owning catalogue publishes no weapon description.
372
399
  - **No sibling name catalogue exists**, and that is a decision rather than a gap — see
373
400
  §Names this repository deliberately does not localize.
374
- - **Coverage:** complete. All 11 weapons carry all six locales.
401
+ - **Coverage:** complete. Every weapon carries all six locales.
375
402
  - **Two entries the source carries are not stored:** `wpn_h_launcher_rocket_sauto`
376
403
  (`Karma HL-9`), the heavy rocket launcher no current catalogue owns, and
377
404
  `wpn_m_submachinegun_kinetic_burst`, which the table lists with no text at all.
@@ -382,7 +409,7 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
382
409
  - **Acquired:** 2026-09-01 UTC.
383
410
  - **In-game localisation revision:** none published; the game ships no immutable
384
411
  identifier for its localisation tables. The acquired table is the evidence.
385
- - **Derivation:** all 31 recipe symbols and their canonical English names come from
412
+ - **Derivation:** every recipe symbol and its canonical English name comes from
386
413
  `data/equipment/modifications.jsonc`, which stays authoritative for canonical English.
387
414
  A symbol joins case-insensitively to the in-game modification identity as
388
415
  `humanoidmod_<symbol>`, which carries a `name` and a `description` per locale.
@@ -392,12 +419,12 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
392
419
  their material costs differ (§`data/equipment/SOURCES.md`). The `_kinetic`, `_laser`
393
420
  and `_plasma` suffix is dropped before the join, so each of the three takes its generic
394
421
  entry's locales — exactly as a shadowing blueprint id takes its generic's in
395
- `blueprint-names.jsonc`. 25 distinct source entries therefore cover all 31 recipes, and
396
- the catalogue stores them once each: `nameKeys` maps a recipe symbol onto the entry the
422
+ `blueprint-names.jsonc`. A smaller set of source entries therefore covers every recipe,
423
+ and the catalogue stores them once each: `nameKeys` maps a recipe symbol onto the entry the
397
424
  game publishes, as `module-names.jsonc` maps a module symbol onto a shared name.
398
425
  - **That shape is about visibility, not bytes.** Storing each shared entry three times
399
- instead costs about the same, because the six duplicate name records weigh roughly what
400
- the 31-entry `nameKeys` map does; the descriptions save about a fifteenth. What the
426
+ instead costs about the same, because the duplicate name records weigh roughly what
427
+ the `nameKeys` map does; the descriptions save about a fifteenth. What the
401
428
  deduplicated form buys is that the sharing is stated in the data, rather than sitting in
402
429
  six duplicate records a later edit could silently pull apart.
403
430
  - **`Headshot Damage` is the one English value the game spells differently.** The in-game
@@ -405,7 +432,7 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
405
432
  kept, as canonical English is kept everywhere in this directory. The lower-case
406
433
  `Stowed reloading` the owning catalogue already carries *is* the game's own spelling
407
434
  and agrees with it.
408
- - **Coverage:** complete. All 31 recipes carry all six locales.
435
+ - **Coverage:** complete. Every recipe carries all six locales.
409
436
  - **One in-game modification is not stored:** `humanoidmod_suit_headshotresistance`
410
437
  (`Increased Helmet Protection`), which `data/equipment/modifications.jsonc` does not
411
438
  carry as a recipe.
@@ -421,7 +448,7 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
421
448
  - **Acquired:** 2026-09-01 UTC.
422
449
  - **In-game localisation revision:** none published; the game ships no immutable
423
450
  identifier for its localisation tables. The acquired table is the evidence.
424
- - **Derivation:** the same 31 recipe symbols as `personal-modification-names.jsonc`,
451
+ - **Derivation:** the same recipe symbols as `personal-modification-names.jsonc`,
425
452
  joined the same way and sharing the generic entry across the nine technology-specific
426
453
  recipes for the same reason. Each takes the identity's `description` string. All six
427
454
  values, English included, are the source's verbatim.
@@ -431,12 +458,81 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
431
458
  and the two are deliberately different strings. It is also the only account of the ten
432
459
  recipes whose `modifiers` list is empty — some switch a capability on, the rest move a
433
460
  stat the panel puts no number on (§`data/equipment/SOURCES.md`).
434
- - **Coverage:** complete. All 31 recipes carry all six locales.
461
+ - **Coverage:** complete. Every recipe carries all six locales.
435
462
  - **Manual corrections:** none. The French
436
463
  `weapon_backpackreloading` description keeps the non-breaking space the source sets
437
464
  between a figure and its unit (`5 secondes`), which is French typography rather than
438
465
  layout.
439
466
 
467
+ ## `personal-tool-names.jsonc`
468
+
469
+ - **Acquired:** 2026-09-03 UTC.
470
+ - **In-game localisation revision:** none published; the game ships no immutable
471
+ identifier for its localisation tables. The acquired table is the evidence.
472
+ - **Derivation:** every tool id and its canonical English name comes from
473
+ `data/equipment/tools.jsonc`, which stays authoritative for canonical English. Each id
474
+ joins by name to the tool's row in the in-game localisation table, which carries a
475
+ `name` per locale. The join is exact and total: every id resolves, and every row's
476
+ English `name` equals the canonical English.
477
+ - **The library id is the only key.** The localisation table keys a tool row by an
478
+ internal identity no journal field carries (§`data/equipment/SOURCES.md`), so a
479
+ consumer never holds one and it is not stored. The library id is the single identifier
480
+ both `getPersonalToolName` and `getPersonalToolById` take, and a second key set would
481
+ let one of the two answer where the other cannot.
482
+ - **A value equal to the English is the game's own.** The game leaves `Arc Cutter` in
483
+ English in German, Spanish, French and Brazilian Portuguese, and `Genetic Sampler` in
484
+ German; Russian translates both. Storing them verbatim is what the sparse contract
485
+ requires: the lookup answers with a source value and never manufactures an English
486
+ fallback.
487
+ - **Coverage:** complete. Every tool carries all six locales.
488
+ - **Manual corrections:** none.
489
+
490
+ ## `commodity-names.jsonc`
491
+
492
+ - **Acquired:** 2026-09-03 UTC.
493
+ - **In-game localisation revision:** none published; the game ships no immutable
494
+ identifier for its localisation tables. The acquired table is the evidence.
495
+ - **Derivation:** every symbol and canonical English name comes from
496
+ `data/commodities/commodities.jsonc` and `rare-commodities.jsonc`, which stay
497
+ authoritative for canonical English. Each symbol joins case-insensitively to the
498
+ in-game commodity localisation identity, which carries a `name` and an `info` string
499
+ per locale. `name` is the value taken. The join is exact and total: every commodity the
500
+ two catalogues hold resolves. The game also names commodity units no catalogue here
501
+ carries (§`data/commodities/SOURCES.md`); a name with no owning record is not stored,
502
+ so the key set is the catalogues' and not the game's.
503
+ - **Standard and rare share one catalogue here**, because they share one symbol space
504
+ and the game names them from one table.
505
+ - **The owning catalogues win the six English disagreements**, as this file's opening
506
+ rule requires. The game's English name is the shorter or the differently cased
507
+ spelling in all but the last of them: `Drones` keeps `Limpets` against `Limpet`,
508
+ `LowTemperatureDiamond` keeps `Low Temperature Diamonds` against
509
+ `Low Temp. Diamonds`, `AerialEdenApple`,
510
+ `WatersOfShintara` and `HIPOrganophosphates` keep their `of`, `of` and `HIP` against
511
+ `Of`, `Of` and `Hip`, and `ThargoidPod` keeps `Xenobiological Prison Pod` against
512
+ `Thargoid Bio-storage Capsule`. The last is a different name rather than a different
513
+ spelling, and it is the one to revisit first if the owning catalogue is ever re-derived
514
+ from the game.
515
+ - **Nine stored non-English values are the game's own abbreviations** — the German
516
+ `Fortschr. Katalysatoren` and `Histor. Kamorin-Waffen`, the Spanish
517
+ `Interconect. de eyector térmico` and `Conductos de transf. de energía`, the French
518
+ `Sys. surveillance animale`, `Sys. enrichissement sols` and
519
+ `Interconnexion dissipateur therm.`, and the Russian
520
+ `Агенты нервно-паралит. действия` and `Детали оборон. беспилотников` — and they stay
521
+ abbreviated because no source spells them out. This is the same position
522
+ `module-names.jsonc` records for its own abbreviated labels. The English `H.E. Suits`
523
+ is not one of them: it is the owning catalogue's own name.
524
+ - **Coverage:** complete. Every commodity carries all six locales, and no commodity has
525
+ five non-English values all byte-identical to its English, so no commodity name is a
526
+ proper noun the game leaves alone.
527
+ - **The registry's `info` prose is not stored.** Each commodity also carries an `info`
528
+ string per locale — the market panel's production, consumption and description text. A
529
+ commodity description catalogue would take those six values verbatim, the way
530
+ `suit-descriptions.jsonc` does; none exists, so the prose is absent rather than
531
+ partial.
532
+ - **Manual corrections:** one. The Spanish `BuckyballBeerMats` is published as
533
+ `"Posavasos Buckyball "` with a trailing space, which is layout and not part of the
534
+ name; it is stored trimmed. Every other value is verbatim.
535
+
440
536
  ## Names this repository deliberately does not localize
441
537
 
442
538
  No catalogues are stored for the following names, either because the game does not
@@ -456,7 +552,7 @@ record in this repository is keyed by them.
456
552
  carries no name at all — see the header of `data/ships/engineering-options.jsonc` — and
457
553
  a consumer names one by joining a module's `familyId` to `module-family-names.jsonc`.
458
554
  - **Handheld personal-weapon names.** The in-game weapon localisation table publishes all
459
- six locales for every one of the eleven weapons, and each of the 55 non-English values
555
+ six locales for every weapon, and every non-English value
460
556
  is byte-for-byte the English: `Karma P-15`, `TK Aphelion` and `Manticore Executioner`
461
557
  are product names the game leaves alone, exactly as it does a hull's. `PersonalWeapon`
462
558
  in `data/equipment/weapons.jsonc` is the one place to read the name; the weapons'
@@ -465,23 +561,33 @@ record in this repository is keyed by them.
465
561
  `Kinematic Armaments` are byte-for-byte identical in all six locales wherever the game
466
562
  names them, which is why `suit-names.jsonc` stores a suit's own name and not the
467
563
  outfitting list's manufacturer-prefixed listing.
468
- - **Suit and weapon stat labels, the on-foot loadout panel's row labels, and engineer
469
- dialogue.** These are the second reason rather than the first: the game does publish all
470
- six locales for each, and none of them names a record in any catalogue here. A stat
471
- label names a field of `Suit` or `PersonalWeapon`, a row label names a line of the
472
- on-foot loadout panel, and an engineer's line is spoken flavour attached to an offer.
473
- Storing them would mean inventing keys this repository does not otherwise own, so a
474
- consumer that needs a field label supplies its own. **This is not the ship slot and
564
+ - **Suit and weapon stat labels, the on-foot loadout panel's rows other than the weapon
565
+ mounts, and engineer dialogue.** These are the second reason rather than the first: the
566
+ game does publish all six locales for each, and none of them names a record in any
567
+ catalogue here. A stat label names a field of `Suit` or `PersonalWeapon`, a panel row
568
+ names a line of the on-foot loadout screen, and an engineer's line is spoken flavour
569
+ attached to an offer. Storing them would mean inventing keys this repository does not
570
+ otherwise own, so a consumer that needs a field label supplies its own. The weapon-mount
571
+ rows are outside this conclusion: `Suit.mounts` carries Frontier's own journal
572
+ `SlotName` for each one, so a mount row names a record this repository holds and its
573
+ localization is a gap rather than an invented key. **This is not the ship slot and
475
574
  restriction gap of [#320](https://github.com/DarkSession/Elite-Dangerous-Almanac/issues/320)**,
476
575
  which is about labels no source translates at all.
477
576
 
478
577
  ## Known gaps
479
578
 
480
579
  Localized coverage follows the accepted sources and is not complete for every catalogue or
481
- stored locale. A language absent from all thirteen catalogues is the locale decision
580
+ stored locale. A language absent from every catalogue is the locale decision
482
581
  recorded above rather than a gap. The accepted sources carry only canonical English for
483
- 19 of the 77 outfitting-family labels, slot and restriction labels, fixed reward names,
484
- and structured loadout, calculation, SLEF and edit messages. Personal equipment carries
485
- no gap: every suit, handheld weapon and modification the owning catalogues hold is
486
- complete in all six locales. Missing source-backed translations remain tracked by
582
+ the outfitting-family labels listed above, slot and restriction labels, the suit
583
+ weapon-mount labels, fixed reward names, and structured loadout, calculation, SLEF and
584
+ edit messages. A missing source-backed translation that has no issue of its own
585
+ remains tracked by
487
586
  [#320](https://github.com/DarkSession/Elite-Dangerous-Almanac/issues/320).
587
+
588
+ Every suit, handheld weapon, tool and modification the personal-equipment catalogues
589
+ hold is complete in all six locales. That area carries these gaps:
590
+
591
+ - **The suit weapon-mount labels are English only.** The game publishes all six locales
592
+ for them, so the values exist to be read. The gap is tracked by
593
+ [#26](https://github.com/DarkSession/Elite-Dangerous-Almanac/issues/26).