@elite-dangerous-almanac/core 0.2.5 → 0.2.7

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 (153) hide show
  1. package/PROVENANCE/i18n/SOURCES.md +199 -113
  2. package/PROVENANCE/materials/SOURCES.md +22 -0
  3. package/PROVENANCE/ships/SOURCES.md +254 -59
  4. package/README.md +17 -11
  5. package/assets/ships/LakonMiner/schematic-bottom.svg +5 -3
  6. package/assets/ships/LakonMiner/schematic-top.svg +2 -4
  7. package/dist/{chunk-XM4VA2WE.js → chunk-4U7KYQGK.js} +1 -1
  8. package/dist/{chunk-XM4VA2WE.js.map → chunk-4U7KYQGK.js.map} +1 -1
  9. package/dist/{chunk-7EWZGDWY.js → chunk-7S7ZTZZY.js} +1 -1
  10. package/dist/chunk-A5TCT2AJ.js +1 -0
  11. package/dist/{chunk-AIEC3LBT.js.map → chunk-A5TCT2AJ.js.map} +1 -1
  12. package/dist/chunk-A7IVMYNF.js +1 -0
  13. package/dist/chunk-A7IVMYNF.js.map +1 -0
  14. package/dist/{chunk-2OBUSQA7.js → chunk-AAU7OM47.js} +1 -1
  15. package/dist/{chunk-2OBUSQA7.js.map → chunk-AAU7OM47.js.map} +1 -1
  16. package/dist/{chunk-KPJ77VPS.js → chunk-BJU27V6C.js} +1 -1
  17. package/dist/{chunk-KPJ77VPS.js.map → chunk-BJU27V6C.js.map} +1 -1
  18. package/dist/{chunk-DSMLYA2M.js → chunk-BMQM4JBL.js} +1 -1
  19. package/dist/{chunk-DSMLYA2M.js.map → chunk-BMQM4JBL.js.map} +1 -1
  20. package/dist/chunk-C3LLPLLD.js +1 -0
  21. package/dist/chunk-C3LLPLLD.js.map +1 -0
  22. package/dist/chunk-EHFHRQEP.js +1 -0
  23. package/dist/{chunk-GLWPSVFV.js.map → chunk-EHFHRQEP.js.map} +1 -1
  24. package/dist/{chunk-YCGISPDR.js → chunk-ETWMPMZP.js} +1 -1
  25. package/dist/{chunk-3NPVWPOV.js → chunk-F7VWRDSL.js} +1 -1
  26. package/dist/chunk-F7VWRDSL.js.map +1 -0
  27. package/dist/{chunk-4CBMQULR.js → chunk-FMA36V6A.js} +1 -1
  28. package/dist/{chunk-4CBMQULR.js.map → chunk-FMA36V6A.js.map} +1 -1
  29. package/dist/chunk-IZIIGK3W.js +1 -0
  30. package/dist/{chunk-TW7LUBHD.js.map → chunk-IZIIGK3W.js.map} +1 -1
  31. package/dist/chunk-KBCA4GEZ.js +1 -0
  32. package/dist/chunk-KLC5XT6F.js +1 -0
  33. package/dist/chunk-KLC5XT6F.js.map +1 -0
  34. package/dist/chunk-M6J7KP7G.js +1 -0
  35. package/dist/chunk-M6J7KP7G.js.map +1 -0
  36. package/dist/chunk-MRLUWHGI.js +1 -0
  37. package/dist/{chunk-FF2X4K5P.js.map → chunk-MRLUWHGI.js.map} +1 -1
  38. package/dist/chunk-MVBVXK3G.js +1 -0
  39. package/dist/chunk-MVBVXK3G.js.map +1 -0
  40. package/dist/{chunk-HBQELOBY.js → chunk-NZXSIHAW.js} +1 -1
  41. package/dist/{chunk-HBQELOBY.js.map → chunk-NZXSIHAW.js.map} +1 -1
  42. package/dist/{chunk-IWFQ4ZKF.js → chunk-OFZGNWBT.js} +1 -1
  43. package/dist/chunk-PF3HZ73R.js +1 -0
  44. package/dist/{chunk-ITKZKREP.js.map → chunk-PF3HZ73R.js.map} +1 -1
  45. package/dist/chunk-QJECDMQQ.js +1 -0
  46. package/dist/{chunk-LZYHBFJC.js.map → chunk-QJECDMQQ.js.map} +1 -1
  47. package/dist/chunk-T7IQHFQ2.js +1 -0
  48. package/dist/chunk-T7IQHFQ2.js.map +1 -0
  49. package/dist/chunk-TSEDU73T.js +1 -0
  50. package/dist/chunk-TSEDU73T.js.map +1 -0
  51. package/dist/chunk-XFDMCPDW.js +1 -0
  52. package/dist/{chunk-GRSNX36B.js.map → chunk-XFDMCPDW.js.map} +1 -1
  53. package/dist/chunk-XRGECU7S.js +1 -0
  54. package/dist/chunk-XRGECU7S.js.map +1 -0
  55. package/dist/{chunk-OLKNYGGT.js → chunk-XSLPWM5N.js} +1 -1
  56. package/dist/chunk-XSN53F7W.js +1 -0
  57. package/dist/{chunk-DBGXZF7O.js.map → chunk-XSN53F7W.js.map} +1 -1
  58. package/dist/chunk-ZEN5K3GE.js +1 -0
  59. package/dist/{chunk-WR6ZFHTO.js.map → chunk-ZEN5K3GE.js.map} +1 -1
  60. package/dist/chunk-ZZTDEDXJ.js +1 -0
  61. package/dist/{chunk-FA5JVXVG.js.map → chunk-ZZTDEDXJ.js.map} +1 -1
  62. package/dist/equipment/index.js +1 -1
  63. package/dist/equipment/upgrade-costs.js +1 -1
  64. package/dist/equipment/upgrade-costs.js.map +1 -1
  65. package/dist/i18n/experimental-effect-descriptions.d.ts +21 -6
  66. package/dist/i18n/experimental-effect-descriptions.js +1 -1
  67. package/dist/i18n/experimental-effects.js +1 -1
  68. package/dist/i18n/index.d.ts +0 -2
  69. package/dist/i18n/index.js +1 -1
  70. package/dist/i18n/materials.d.ts +7 -6
  71. package/dist/i18n/materials.js +1 -1
  72. package/dist/i18n/micro-resources.d.ts +7 -6
  73. package/dist/i18n/micro-resources.js +1 -1
  74. package/dist/i18n/modules.d.ts +10 -7
  75. package/dist/i18n/modules.js +1 -1
  76. package/dist/i18n/pre-engineered.js +1 -1
  77. package/dist/materials/index.js +1 -1
  78. package/dist/materials/materials-all.js +1 -1
  79. package/dist/materials/materials-encoded.js +1 -1
  80. package/dist/materials/materials-manufactured.js +1 -1
  81. package/dist/materials/materials.js +1 -1
  82. package/dist/materials/micro-resources-all.js +1 -1
  83. package/dist/materials/micro-resources.js +1 -1
  84. package/dist/ships/blueprint-costs.js +1 -1
  85. package/dist/ships/blueprint-journal.js +1 -1
  86. package/dist/ships/build-metrics.js +1 -1
  87. package/dist/ships/engineering-options.d.ts +12 -6
  88. package/dist/ships/engineering-options.js +1 -1
  89. package/dist/ships/engineering.js +1 -1
  90. package/dist/ships/gunsights.d.ts +2 -2
  91. package/dist/ships/gunsights.js +1 -1
  92. package/dist/ships/index.d.ts +5 -5
  93. package/dist/ships/index.js +1 -1
  94. package/dist/ships/loadout-calculations.d.ts +11 -2
  95. package/dist/ships/loadout-calculations.js +1 -1
  96. package/dist/ships/loadout-validation.js +1 -1
  97. package/dist/ships/modules-all.d.ts +2 -2
  98. package/dist/ships/modules-all.js +1 -1
  99. package/dist/ships/modules-core.d.ts +3 -3
  100. package/dist/ships/modules-core.js +1 -1
  101. package/dist/ships/modules-hardpoint.d.ts +1 -1
  102. package/dist/ships/modules-internal.d.ts +1 -1
  103. package/dist/ships/modules-internal.js +1 -1
  104. package/dist/ships/modules-utility.d.ts +1 -1
  105. package/dist/ships/modules.d.ts +9 -6
  106. package/dist/ships/modules.js +1 -1
  107. package/dist/ships/pre-engineered-stats.js +1 -1
  108. package/dist/ships/pre-engineered.js +1 -1
  109. package/dist/ships/ship-loadout.d.ts +65 -23
  110. package/dist/ships/ship-loadout.js +1 -1
  111. package/dist/ships/weapons.js +1 -1
  112. package/package.json +1 -9
  113. package/dist/chunk-3NPVWPOV.js.map +0 -1
  114. package/dist/chunk-5QSCLEEB.js +0 -1
  115. package/dist/chunk-5QSCLEEB.js.map +0 -1
  116. package/dist/chunk-5VBB5CTV.js +0 -1
  117. package/dist/chunk-5VBB5CTV.js.map +0 -1
  118. package/dist/chunk-5ZVYRX6Z.js +0 -1
  119. package/dist/chunk-5ZVYRX6Z.js.map +0 -1
  120. package/dist/chunk-AIEC3LBT.js +0 -1
  121. package/dist/chunk-DAQ3PJ4R.js +0 -1
  122. package/dist/chunk-DAQ3PJ4R.js.map +0 -1
  123. package/dist/chunk-DBGXZF7O.js +0 -1
  124. package/dist/chunk-DCB4COCL.js +0 -1
  125. package/dist/chunk-DCB4COCL.js.map +0 -1
  126. package/dist/chunk-FA5JVXVG.js +0 -1
  127. package/dist/chunk-FF2X4K5P.js +0 -1
  128. package/dist/chunk-G2VSQFD6.js +0 -1
  129. package/dist/chunk-G2VSQFD6.js.map +0 -1
  130. package/dist/chunk-GLWPSVFV.js +0 -1
  131. package/dist/chunk-GRSNX36B.js +0 -1
  132. package/dist/chunk-ITKZKREP.js +0 -1
  133. package/dist/chunk-J4PCK4RV.js +0 -1
  134. package/dist/chunk-J4PCK4RV.js.map +0 -1
  135. package/dist/chunk-JO52LYO3.js +0 -1
  136. package/dist/chunk-KJFUNIIY.js +0 -1
  137. package/dist/chunk-KJFUNIIY.js.map +0 -1
  138. package/dist/chunk-LZYHBFJC.js +0 -1
  139. package/dist/chunk-OJC6AUL7.js +0 -1
  140. package/dist/chunk-OJC6AUL7.js.map +0 -1
  141. package/dist/chunk-TW7LUBHD.js +0 -1
  142. package/dist/chunk-WR6ZFHTO.js +0 -1
  143. package/dist/i18n/engineering-groups.d.ts +0 -21
  144. package/dist/i18n/engineering-groups.js +0 -1
  145. package/dist/i18n/engineering-groups.js.map +0 -1
  146. package/dist/i18n/ships.d.ts +0 -36
  147. package/dist/i18n/ships.js +0 -1
  148. package/dist/i18n/ships.js.map +0 -1
  149. /package/dist/{chunk-7EWZGDWY.js.map → chunk-7S7ZTZZY.js.map} +0 -0
  150. /package/dist/{chunk-YCGISPDR.js.map → chunk-ETWMPMZP.js.map} +0 -0
  151. /package/dist/{chunk-JO52LYO3.js.map → chunk-KBCA4GEZ.js.map} +0 -0
  152. /package/dist/{chunk-IWFQ4ZKF.js.map → chunk-OFZGNWBT.js.map} +0 -0
  153. /package/dist/{chunk-OLKNYGGT.js.map → chunk-XSLPWM5N.js.map} +0 -0
@@ -23,24 +23,61 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
23
23
 
24
24
  ## `module-names.jsonc`
25
25
 
26
- - **Acquired:** 2026-08-14 UTC.
27
- - **EDDI revision:** commit `fdc1f47933bd930464610111fa11fc9dae264414`.
28
- - **EDSY revision:** commit `e446fbe6e4597dea7ab0bd3105b9a36642388040`;
29
- database version `424009901`, last-modified marker `20260810`.
30
- - **Derivation:** all 1,199 current module symbols and English names come from the four
31
- `data/ships/modules-*.jsonc` catalogues. EDDI's `ModuleDefinitions.cs` joins a symbol
32
- to a resource key; `Properties/Modules.resx` and its localized siblings supply names.
33
- An EDDI value is accepted only when its base English resource exactly equals the
34
- Almanac's canonical English name. This prevents broad EDDI families such as
35
- `CargoRack`, `MissileRack` and `PlanetaryApproachSuite` from erasing the distinct Mk II,
36
- seeker and advanced names the Almanac carries. EDSY's module `fdname` and effective
37
- `namekey` fill a missing `de`, `es`, `fr` or `ru` value only when EDSY's English
38
- module name also exactly equals the canonical name. Values shared by modules with one
39
- canonical name are retained only when they agree, then stored once under that name.
40
- - **Coverage:** English covers all 1,199 symbols. The explicit translations cover 1,120
41
- in German, 1,090 in Spanish, 1,088 in French, 1,155 in Brazilian Portuguese and 1,153
42
- in Russian. Portuguese comes from the same two joins, reading EDDI's
43
- `Modules.pt-BR.resx` and EDSY's `lang-pt.json`.
26
+ - **Acquired:** 2026-08-30 UTC.
27
+ - **In-game localisation revision:** none published; the game ships no immutable
28
+ identifier for its localisation tables. The acquired table is the evidence.
29
+ - **Derivation:** all 1,194 current module symbols and English names come from the four
30
+ `data/ships/modules-*.jsonc` catalogues, which stay authoritative for canonical
31
+ English. Each symbol joins case-insensitively to the in-game module localisation
32
+ identity, which carries a `name`, a `longname` and an `info` string per locale. The
33
+ join is exact and total: every one of the 1,194 resolves.
34
+ - **`longname` is the name taken.** It is the outfitting list's full name and equals
35
+ the canonical English on 1,041 of the symbols, where `name` the abbreviated panel
36
+ form equals it on 726. **Both totals were counted over the 1,199-symbol set that
37
+ preceded the removal of the five plain size-8 drives (§`data/ships/SOURCES.md`), and
38
+ are not re-derived here:** the in-game localisation table is not vendored, so whether
39
+ those five sat inside either total cannot be checked from this repository. Read them
40
+ as upper bounds over 1,194 symbols until the table is re-acquired. `name` is taken
41
+ only where a longname is a template rather than a name, which is the cargo racks,
42
+ fuel tanks and corrosion-resistant racks whose longname carries a capacity.
43
+ - **Aliasing is followed.** A localisation value may be a `$Other_Key;` pointer rather
44
+ than text; roughly three thousand of the keys are. Each is followed to the entry
45
+ holding real text before anything is stored, and a value still carrying a `$` token
46
+ after that is not a name and is rejected.
47
+ - **The `(Free)` vessel-hangar grants have no name of their own** — theirs is a
48
+ template wrapping the base hangar's. Their canonical English is already the base
49
+ module's, so they share its record, exactly as they did before.
50
+ - **This table replaces the EDDI and EDSY joins the catalogue previously used**, and wins
51
+ where they disagree, as in-game values do everywhere in this repository. It fills the
52
+ 349 values those joins left empty and restyles 3,135 they carried, across 324 distinct
53
+ record-and-locale pairs: 73 differ only in letter case, 10 only in punctuation or
54
+ accents, and 241 in wording. Many of the last are the game being specific where the
55
+ registries were general — Russian `Двигатели` becomes `Маневровые двигатели`, Brazilian
56
+ Portuguese `Propulsores` becomes `Propulsores de desempenho melhorado`.
57
+ - **The least abbreviated spelling is the one stored**, as it is in
58
+ `material-names.jsonc`. The outfitting panel shortens a label that will not fit, and
59
+ that is a rendering rather than a different translation, so where the panel abbreviates
60
+ the longest unabbreviated spelling available for that module and locale is taken
61
+ instead — the catalogue's own previous value where it had one, otherwise the source's
62
+ other field. French `Laser à impuls.` is stored as `Laser à impulsion`, Russian
63
+ `Разбрас-ль дип. отражателей` as `Разбрасыватель дипольных отражателей`. An
64
+ unabbreviated candidate is rejected when it is so much shorter that it is plainly a
65
+ different label rather than the same one spelled out: German `EGM` does not replace
66
+ `Elektr. Gegenmaßnahmen`. **Ten values remain abbreviated** because no source spells
67
+ them out — the Mk II gravity-optimised thrusters in four locales, the Advanced
68
+ Planetary Approach Suite in three, and three others — and there the alternative is a
69
+ bare `Schubdüsen` or `Propulseurs` that loses what distinguishes the module.
70
+ - **A rendered capacity or grant marker is not a name.** A longname may carry a module's
71
+ own capacity or a `(Free)` marker — `Anti-Korrosions-Frachtgestell (KAP.: 1)` — which
72
+ describes one module rather than naming the family, so it is rejected and the source's
73
+ other field is read instead.
74
+ - **One record per canonical English name.** Where the source distinguishes in another
75
+ locale what English spells the same way, the reading most symbols share is stored:
76
+ `Lightweight Alloy` and `Reinforced Alloy` are singular on 25 hulls and plural on the
77
+ rest, and the singular is kept, which is also the number the English carries.
78
+ `Hatch Breaker Limpet Controller` is specific on twenty symbols and generic on one, and
79
+ the specific is kept.
80
+ - **Coverage:** complete. All 1,194 symbols carry all six locales.
44
81
  - **Manual corrections:** none.
45
82
 
46
83
  ## `blueprint-names.jsonc`
@@ -78,16 +115,29 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
78
115
 
79
116
  ## `experimental-effect-names.jsonc`
80
117
 
81
- - **Acquired:** 2026-08-14 UTC.
82
- - **EDSY revision:** commit `e446fbe6e4597dea7ab0bd3105b9a36642388040`;
83
- database version `424009901`, last-modified marker `20260810`.
118
+ - **Acquired:** 2026-08-30 UTC.
119
+ - **In-game localisation revision:** none published; the game ships no immutable
120
+ identifier for its localisation tables. The acquired table is the evidence.
84
121
  - **Derivation:** each of the 86 current keys and its English name comes from
85
- `data/ships/experimental-effects.jsonc`. The Frontier symbol joins directly to
86
- EDSY's `expeffect.fdname`; that record's id selects an explicit `expeffect-<id>` entry
87
- from each language file.
88
- - **Coverage:** English covers all 86 effects; EDSY covers 84 in German and 85 each in
89
- Spanish, French, Brazilian Portuguese and Russian.
90
- - **Manual corrections:** none.
122
+ `data/ships/experimental-effects.jsonc`, which stays authoritative for canonical
123
+ English. The Frontier symbol joins to the in-game experimental-effect name table,
124
+ which supplies every locale for all 86. The table replaces the EDSY join this
125
+ catalogue previously used: where the two disagree the in-game value is kept, as
126
+ everywhere else in this repository. It supplies six values EDSY did not carry — all
127
+ five non-English `special_super_penetrator` names and the German
128
+ `special_weapon_rateoffire` — and changes two EDSY already carried: German
129
+ `special_regeneration_sequence` is "Regenerationssequenz" (EDSY
130
+ "Regenerierungssequenz") and Brazilian Portuguese `special_lock_breaker` is "Quebra da
131
+ Trava do Alvo" (EDSY "Quebra de Trava de Alvo"). Every other value agrees.
132
+ - **The three `_cooled` variants take their base effect's names.**
133
+ `special_feedback_cascade_cooled`, `special_plasma_slug_cooled` and
134
+ `special_super_penetrator_cooled` are pre-engineered rail-gun variants the game does
135
+ not name separately, so the source marks them as carrying the base effect's entry.
136
+ Each takes those values, exactly as a shadowing blueprint id takes its generic's.
137
+ - **Coverage:** complete. All 86 effects carry all six locales.
138
+ - **Manual corrections:** the source appends a `†` to every marked cell of the three
139
+ `_cooled` variants above; it is the acquisition's own shadow marker rather than part of
140
+ a name, and is removed here.
91
141
 
92
142
  ## `material-names.jsonc`
93
143
 
@@ -100,12 +150,31 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
100
150
  `locale/material/horizons/{raw,manufactured,encoded}.csv`; only that row's explicit
101
151
  localized columns are copied. The source's English column is not copied because the
102
152
  owning materials catalogues remain authoritative for canonical names. The canonical
103
- English values therefore keep the existing `Segment` spelling and omit the source's
104
- parenthetical Guardian and Thargoid category labels where the owning catalogue does;
105
- localized columns remain verbatim source values.
106
- - **Coverage:** English, Spanish and Russian cover all 146 materials. The explicit
107
- translations cover 128 in German, and 140 each in French and Brazilian Portuguese.
108
- - **Manual corrections:** none.
153
+ English values therefore omit the source's parenthetical Guardian and Thargoid
154
+ category labels where the owning catalogue does; localized columns remain verbatim
155
+ source values.
156
+ - **Second source, the in-game material localisation tables**, acquired 2026-08-30 UTC;
157
+ 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
161
+ (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
163
+ (`Fragmento Caústico` against the game's `Fragmento cáustico`), and the rest are
164
+ wording.
165
+ - **Coverage:** complete. All 146 materials carry all six locales.
166
+ - **Manual corrections:** six of the in-game values are the outfitting UI's own
167
+ abbreviations, shortened to fit its widget rather than translated differently —
168
+ `Comp. de destroços Guardian` against the helper's `Componentes de destroços Sentinela
169
+ Guardian`, and likewise for `Guardian_Sentinel_WeaponParts` (French and Brazilian
170
+ Portuguese), `Guardian_TechComponent` (French and Brazilian Portuguese) and
171
+ `HeatConductionWiring` (Spanish). The unabbreviated value is kept in each.
172
+ - **`Guardian_Sentinel_WreckageComponents` drops `Sentinel` in every locale**, following
173
+ the owning catalogue's rename (see `data/materials/SOURCES.md`). Its Brazilian
174
+ Portuguese is the one value here taken from neither source verbatim: the in-game table
175
+ abbreviates it to `Comp. de destroços Guardian` to fit the widget, so the whole word is
176
+ kept as it is for the other abbreviated labels above, giving
177
+ `Componentes de destroços Guardian`.
109
178
 
110
179
  ## `micro-resource-names.jsonc`
111
180
 
@@ -123,66 +192,24 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
123
192
  `SmallCapacityPowerRegulator` do not. All 30 take the explicit in-game `name` values for
124
193
  German, Spanish, French and Russian. In both cases the owning catalogue remains
125
194
  authoritative for canonical English names.
126
- - **Coverage:** English, Spanish and Russian cover all 226 micro resources. The explicit
127
- translations cover 218 in German, 225 in French and 188 in Brazilian Portuguese. The
128
- 30 in-game-backed records take Portuguese from Odyssey Materials Helper where it has a
129
- row, because the in-game capture supplied no Portuguese; `PowerVirus` and
130
- `SmallCapacityPowerRegulator`, which the source does not carry at all, have none.
131
- - **Manual corrections:** none.
132
-
133
- ## `ship-names.jsonc`
134
-
135
- - **Acquired:** 2026-08-18 UTC.
136
- - **Odyssey Materials Helper revision:** commit
137
- `23343c453938e724f317c56e9eb7db0dbfa71f78`;
138
- `application/src/main/resources/locale/ships/ships.csv` has SHA-256
139
- `6785f7cea00f36ca0a853091fd88f8ed5481a60f55c269643bff1ab0c3d6993d`.
140
- - **EDSY revision:** commit `e446fbe6e4597dea7ab0bd3105b9a36642388040`;
141
- database version `424009901`, last-modified marker `20260810`.
142
- - **Derivation:** each of the 48 current ship symbols and canonical English names comes
143
- from `data/ships/ships.jsonc`. The symbol is joined to Odyssey Materials
144
- Helper's `ships.name.*` key after removing punctuation and folding case. EDSY's
145
- `eddb.js` `ship.fdname` supplies the second join, with explicit `ship-<id>` language
146
- entries filling locales absent from the CSV. The CSV keys a row by the ship's display
147
- name rather than its symbol, which differ for the four hulls whose name carries a mark
148
- the symbol omits (`Viper` is `ships.name.viper_mk_iii`), so the name is tried first and
149
- the symbol second. The resulting source-backed coverage is 48 ships in Spanish, 44 in
150
- French, 38 in Brazilian Portuguese and 48 in Russian; no accepted source carries a
151
- German ship-name table.
152
- - **Standing conclusion:** every source-backed non-English value is byte-for-byte equal
153
- to the canonical English ship name. The explicit values remain in the catalogue so a
154
- lookup distinguishes a source-backed same spelling from an unavailable translation.
155
- - **Manual corrections:** none.
156
-
157
- ## `ship-manufacturer-names.jsonc`
158
-
159
- - **Acquired:** 2026-08-18 UTC.
160
- - **Derivation:** all 48 symbol-to-manufacturer values are projected directly from
161
- `data/ships/ships.jsonc`, whose pinned sources and corrections are recorded in
162
- `data/ships/SOURCES.md`. Repeated manufacturer strings remain keyed by ship symbol so
163
- consumers need no separate manufacturer identity space.
164
- - **Coverage:** canonical English covers every ship. The accepted sources carry no
165
- localized manufacturer labels.
166
- - **Manual corrections:** none.
167
-
168
- ## `engineering-group-names.jsonc`
169
-
170
- - **Acquired:** 2026-08-18 UTC.
171
- - **EDSY revision:** commit `e446fbe6e4597dea7ab0bd3105b9a36642388040`;
172
- database version `424009901`, last-modified marker `20260810`; `lang-en.json` and
173
- `lang-ru.json` have Git blob ids `9b199db635f7b968b75c8e9a14bdce68e37e4120` and
174
- `36496372d056754c34da03ca6836e27987c96b6a` respectively.
175
- - **Derivation:** each of the 48 group ids and its canonical English name is projected
176
- from `data/ships/engineering-options.jsonc`. That catalogue derives its group menus
177
- from EDSY, with the supplemental sources and corrections recorded in
178
- `data/ships/SOURCES.md`. Where a canonical English name matches an EDSY `mtype-*`
179
- value in `lang-en.json` byte-for-byte and uniquely, explicit values with the same key
180
- are copied from `lang-ru.json`.
181
- - **Coverage:** canonical English covers every engineering option group; Brazilian
182
- Portuguese and Russian each cover 44 of 48. The Guardian power-plant, power-distributor
183
- and hull-reinforcement groups have no distinct EDSY label, and EDSY carries no value in
184
- either language for `frameShiftDrivesSCO`.
185
- - **Manual corrections:** none.
195
+ - **Second source, the in-game micro-resource localisation tables**, acquired
196
+ 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
202
+ lower-cases (`Données classifiées de puissance`).
203
+ `PowerMegashipData` is absent from the micro-resource table and appears in the material
204
+ one; its values are taken from there.
205
+ - **Coverage:** complete. All 226 micro resources carry all six locales.
206
+ - **Manual corrections:** five in-game values are layout, not names. Four German
207
+ consumables carry a `<br>` inside a compound word that the UI wraps —
208
+ `Energie-<br>zelle`, `Splitter-<br>granate`, `Schild-<br>unterbrecher` and
209
+ `Schild-<br>generator` and the French `Amm_Grenade_EMP` is abbreviated to
210
+ `Neutralisat. de bouclier` to fit its widget. The whole word is kept in each:
211
+ `Energiezelle`, `Splittergranate`, `Schildunterbrecher`, `Schildgenerator` and
212
+ `Neutralisateur de bouclier`.
186
213
 
187
214
  ## `module-family-names.jsonc`
188
215
 
@@ -209,15 +236,30 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
209
236
 
210
237
  ## `experimental-effect-descriptions.jsonc`
211
238
 
212
- - **Acquired:** 2026-08-18 UTC.
213
- - **EDSY revision:** commit `e446fbe6e4597dea7ab0bd3105b9a36642388040`;
214
- database version `424009901`, last-modified marker `20260810`.
215
- - **Derivation:** the 29 effects with a `description` project that canonical English
216
- value from `data/ships/experimental-effects.jsonc`. Effects without a source-backed
217
- description remain absent rather than receiving generated prose.
218
- - **Coverage:** canonical English covers 29 of 86 effects. The accepted sources carry no
219
- localized description table.
220
- - **Manual corrections:** none.
239
+ - **Acquired:** 2026-08-30 UTC.
240
+ - **In-game localisation revision:** none published; the game ships no immutable
241
+ identifier for its localisation tables. The acquired table is the evidence.
242
+ - **Derivation:** each of the 86 current keys comes from
243
+ `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
247
+ answer different questions and are deliberately different strings. An effect's
248
+ `description` in `data/ships/experimental-effects.jsonc` is a mechanical note that
249
+ 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
251
+ such note and carry none. What the game shows a player is display prose that names no
252
+ magnitudes ("Modified munitions that convert a portion of damage to explosive …"), and
253
+ it exists for every effect. Projecting one onto the other would have cost the
254
+ mechanical notes their numbers; storing the display prose here keeps each field doing
255
+ its own job, and the ships catalogue is unchanged.
256
+ - **Coverage:** complete. All 86 effects carry all six locales.
257
+ - **Manual corrections:** 26 of the source's descriptions begin with one or more
258
+ bracketed tokens — `[ShieldRegen]`, and `[SnsrBlinding][Heat]` on
259
+ `special_radiant_canister`. A token is byte-identical across all six locales and is
260
+ left untranslated in each, so it is an identifier the game's client consumes rather
261
+ than text meant for a player; the tokens are removed here. The `†` shadow marker
262
+ described under `experimental-effect-names.jsonc` is removed from descriptions too.
221
263
 
222
264
  ## `pre-engineered-variant-names.jsonc`
223
265
 
@@ -230,23 +272,67 @@ tag follows the rule above, so `pt-PT` resolves to Brazilian Portuguese.
230
272
  names such as the three `Decorative_*` festive launchers remain canonical English.
231
273
  - **The 22 Merc-shop rows carry the shop's own names**, in 14 distinct records — the shop
232
274
  sells a "Far-Reaching Abrasion Blaster", not an Abrasion Blaster — so they do not reuse
233
- their base module's record. English and the German, Spanish, French and Russian values
234
- are supplied by the repository owner from the in-game shop listing; no registry
235
- publishes them.
236
- - **Coverage:** English covers every variant. Ordinary names inherit the explicit
237
- localized values available for their base module, which now includes Brazilian
238
- Portuguese on 51 of the 76 variants; the Merc-shop names carry the five locales the
239
- repository owner supplied and no Portuguese; fixed reward names have no accepted
240
- translation source.
275
+ their base module's record. All six locales are supplied by the repository owner from
276
+ the in-game shop listing; no registry publishes them. The Brazilian Portuguese column
277
+ was acquired 2026-08-30 UTC and agrees byte-for-byte with the five columns already
278
+ stored, which it does not change.
279
+ - **A tech-broker unlock may carry an unlock marker**, and 19 of them do — see
280
+ `data/ships/SOURCES.md`. Those names are not their base module's, so they do not reuse
281
+ its record. Where the marker is a manufacturer (`Sirius`, `Azimuth`) or a version
282
+ (`V1`) it is not a translatable word, so the localized value is that marker composed
283
+ with the base module's own localized name: German `Suchraketenrampe V1`, Spanish
284
+ `Sirius Lanzamisiles AX`. Composition can only reach as far as the base module does,
285
+ which is why `Frame Shift Drive (SCO) V1` has Brazilian Portuguese and Russian only and
286
+ `Azimuth Enhanced AX Multi-Cannon` lacks Spanish and French: those are the base
287
+ modules' own gaps, not new ones.
288
+ - **Six records carry a translation composed in this repository rather than taken from a
289
+ source, and are the only values in `data/i18n/` that are.** They are marked here
290
+ because the rest of this directory is explicit source values, and a reader is entitled
291
+ to know which is which. The game does not publish either phrase in a form this
292
+ repository can join to:
293
+ - The three `Modified` Guardian weapons. Unlike `Sirius`, `Azimuth` and `V1`, `Modified`
294
+ is a translatable word, so it cannot simply be composed with the base module's
295
+ localized name. Each locale's adjective agrees with the base noun it qualifies —
296
+ German `Modifizierter Guardian-Plasmalader` against `Modifizierte Guardian-Gausskanone`,
297
+ Russian `Модифицированная пушка Гаусса` against `Модифицированное осколочное орудие`.
298
+ - The three `Decorative_*` festive launchers. The game does not translate their names,
299
+ so `Festive` and the colour are rendered in each locale and qualify the base module's
300
+ own localized name.
301
+
302
+ Replace any of the twelve with a source-backed value the moment one is published.
303
+ - **Coverage:** English covers every variant, and Brazilian Portuguese and Russian now do
304
+ too. Ordinary names inherit the explicit localized values available for their base
305
+ module; the Merc-shop names carry all six locales. The German, Spanish and French gaps
306
+ that remain are their base modules' own — the SCO drive and the Enhanced AX
307
+ Multi-Cannon carry no value in those locales for composition to build on.
241
308
  - **Manual corrections:** none.
242
309
 
310
+ ## Names this repository deliberately does not localize
311
+
312
+ Three catalogues were removed rather than completed, because the game does not translate
313
+ what they held and storing English under five more keys said otherwise.
314
+
315
+ - **Ship names and manufacturers.** Odyssey Materials Helper and EDSY each publish a
316
+ per-locale ship column, and every value either one publishes is byte-for-byte the
317
+ canonical English name: a hull name is a proper noun the game leaves alone, and so is
318
+ a manufacturer's. No source publishes a localized manufacturer label at all. A lookup
319
+ that can only ever answer in English is not a translation lookup, so `getShipName` and
320
+ `getShipManufacturer` are gone; `data/ships/ships.jsonc` carries both strings and stays
321
+ the one place to read them.
322
+ - **Engineering-group labels.** An engineering group is this repository's own partition
323
+ of the modules that share one menu; the game heads that menu with the module's
324
+ outfitting family and publishes no group label of its own. The EDSY `mtype-*` values
325
+ previously stored here were outfitting labels reached by a name join, which is why they
326
+ disagreed with `module-family-names.jsonc` in 22 places on wording. A group therefore
327
+ carries no name at all — see the header of `data/ships/engineering-options.jsonc` — and
328
+ a consumer names one by joining a module's `familyId` to `module-family-names.jsonc`.
329
+
243
330
  ## Known gaps
244
331
 
245
332
  Localized coverage follows the accepted sources and is not complete for every catalogue or
246
- stored locale. A language absent from all eleven catalogues is the locale decision
333
+ stored locale. A language absent from all eight catalogues is the locale decision
247
334
  recorded above rather than a gap. The accepted sources carry only canonical English for
248
- ship manufacturers, experimental-effect descriptions, 19 of the 77 outfitting-family
249
- labels, some engineering-group labels, slot and restriction labels, fixed reward names,
335
+ 19 of the 77 outfitting-family labels, slot and restriction labels, fixed reward names,
250
336
  and structured loadout, calculation, SLEF and edit messages. Missing source-backed
251
337
  translations remain tracked by
252
338
  [#320](https://github.com/DarkSession/Elite-Dangerous-Almanac/issues/320).
@@ -26,6 +26,28 @@
26
26
  Phosphorus, Sulphur, Iron, Nickel, Rhenium, Lead** — the convention the in-game raw
27
27
  grid columns follow.
28
28
 
29
+ ### Manual correction — the three Guardian blueprint fragments
30
+
31
+ FDevIDs' `material.csv` names `Guardian_ModuleBlueprint`, `Guardian_WeaponBlueprint` and
32
+ `Guardian_VesselBlueprint` `… Blueprint Segment`. The game calls them **Fragment**, which
33
+ is the name carried here. The in-game localisation table confirmed by repository-owner
34
+ in-game verification (2026-08-30 UTC) says `Fragment` in every locale, and the French and
35
+ Russian columns Odyssey Materials Helper already supplied said `Fragment de plan …` and
36
+ `Фрагмент чертежа …` while its English, German, Spanish and Portuguese said Segment — the
37
+ disagreement was inside one source, not between the game and this repository.
38
+
39
+ ### Manual correction — Guardian Wreckage Components has no Sentinel
40
+
41
+ FDevIDs names `Guardian_Sentinel_WreckageComponents` `Guardian Sentinel Wreckage
42
+ Components`; the game calls it **Guardian Wreckage Components**, which is the name
43
+ carried here. The symbol keeps Frontier's own `_Sentinel_` spelling, because that is what
44
+ the journal writes. Repository-owner in-game verification, 2026-08-30 UTC; the in-game
45
+ localisation table drops the word in German, Spanish, French and Brazilian Portuguese
46
+ too, and the Russian column Odyssey Materials Helper already supplied had no equivalent
47
+ of it either — `Обломки кораблекрушения Стражей`, against the `часовых Стражей` it uses
48
+ for `Guardian_Sentinel_WeaponParts`. That sibling **keeps** its Sentinel: the game names
49
+ it `Guardian Sentinel Weapon Parts`, so only the wreckage components are renamed.
50
+
29
51
  ### Secondary source — Thargoid caustic / Titan materials absent from FDevIDs
30
52
 
31
53
  Several Thargoid caustic and Titan materials are absent from the pinned FDevIDs