Seems like you have directly created a language version of an item before adding the new language in Sitecore system settings.
You need to follow the below steps to add a language to Sitecore system settings:
In the Content Editor, go to /sitecore/System/Languages.
Right-click and then click Insert, Language.
In the Add a New Language dialog box, in the ...
You could do this with Unicorn (it will not fail, even with these rogue invariant item versions) but you can also achieve it with the built-in developer tools.
Before you do, set your default system serialization format to YAML. By default you can set this in App_Config\Sitecore\CMS.Core\Sitecore.Serialization.config.
Go to your Developer ribbon, Serialize ...
You need to configure four settings:
Enable site-level language fallback
Specify the language fallback rules
Enable item level fallback
Enable field level fallback
Sounds like you have configured the first two settings (please ensure you are looking at the correct version of Sitecore too)
Please ensure you review this full list here
This question may be opinion based and can have different answers. However, I can provide you an idea how I implemented Language Selection feature on different websites. In this case I will only talk about the change required in Sitecore CMS.
Instead of using the Languages from /sitecore/system/Languages, you can create a container item under each site named ...
You need to register custom language in .NET and then try to define that in Sitecore.
string culture = "en-JP";
string name = "English (Japanese)";
//Create Culture & Region Info with an existing Language Culture (Eg: en-US)
CultureInfo cultureInfo = new CultureInfo("en-US");
RegionInfo regionInfo = new ...
The issue turned out to be this code that was present in one of my performance config patches:
Any time Translate.Text() was called, it would permanently delete the dictionary.dat file until the dictionary got published again.