Please use code blocks via back-ticks everywhere possible. You have them somewhere, but not others
Proposed Implementation 1.
"This will require a mod build and reload to start localizing, but there is no suitable alternate for this due to dynamic content."
Lets be clearer here. What will happen exactly, for who? Eg "The first time (how do we detect this?) a mod is loaded after being built, after loading the english localisation files, we will scan the mod for all instances of ILocalizedModType and build a list of all translation keys from the values of any fields or properties with the type LocalizedText . For each key which does not have a mapping in the loaded translations, we will find a .hjson file in the mod to add it to. If a mod has no .hjson files nothing will happen. The .hjson file selected will be …, we will update the file by doing …
"If an existing key has a value that conflicts with the loaded value…(what should we do? why would that happen? Dynamic localization value registration?)"
What does this mean anymore? Can we remove it?
What about text which doesn't have a category? (Eg Mods.OtherMod.Category or a replacement translation? Are we mandating that all translations in a mod have to start with Mods.MyMod?
"Entries will not be populated by dynamic values assigned via SetFallback"
Why?
"All entries within a category will be alphabetized. All categories within a file will be alphabetized."
What entries are not alphabetical? Where will you insert the new entry(s)?
2.
I guess we're going the localisation mod rather than resource pack route atm
What if a mod is partially localized, how are the localisations combined, just load order? If so, the example will need to include sortAfter
"hjson files will be complete dues to #1."
How? It's not immediately clear, do you want to refer to a specific part of the process from 1.
Will it be extracted all to one file, or to a directory structure mirroring the original mod?
3.
Please make the ExampleItem/ExampleSword snippet example be a code-block, with proper indents
If we're making every ModType have a DisplayName then we should mention it in section 3.
Is this a good idea?
Linking back to 1. and searching for translations, what about things that aren't ModType?
4.
Options a and b need to be bullet points for clearer sepration
5.
This section needs some work to be clearer on what exactly will be changed and how it will work.
What are the replacements for the main methods on ModTranslation ?
Automate ModTranslation key binding in some way.
How? Should we move to LocalizedText properties? With a helper method to construct them easily from an ILocalizedModType?
Properties means we don't have issues with backing fields and cloning when people add their own extra translations to a ModItem for eg
Can't "Make ModTranslation ctor" do anything if we're removing it.
Mention the changes to the hierarchy here. (or earlier)
More detailed code examples
"Nothing for modders to change"
Probably remove this point, because it seems to contradict 3.
"Closed Source mods will have to publish an update"
what does this mean exactly?
"Modders will have to move translations around"
Post a before-after snippet?
"Modders can optionally use this feature."
Which feature? How?
"Modders exposing a ModType will need to add Category to it, or it will be based off of the ModType classname"
How, exactly?
Are all ModType's going to be ILocalizedModType automatically?
Probably this whole section should just get rolled into the previous one.
"Modders using dynamic values must have a stub entry in hjson files"…
What's a stub entry look like? Will it be automatically added?
How does that work with a fallback, I thought localisation files took precedence over fallbacks?
Long term roadmap
Workshop localization support
Do you mean resource packs?
Translation files autoloaded from foldername and filename as textures are.
Remove this? I don't think it will work with the other design proposals, and may just make confusion having different ways to do the same thing.
Allow modder to define key, similar to Texture override? Might complicate things, need feedback.
What do you mean here? Code example? Why would someone want to do this?