anchor.diff:      end;
     end;
   
  +  {
     // Populate subtag names if needed
     nameAdded := False;
     v := json.GetValue(TKeyboardInfoFile.SLanguages);
  -  {
  +  
     if v is TJSONObject then
     begin
       olang := lang as TJsonObject;
  
positive.code:     json.AddPair('id', FID);
  end;
  
  function TMergeKeyboardInfo.CheckOrMigrateLanguages: Boolean;
  var
    v: TJSONValue;
    alangs: TJSONArray;
    langs, lang: TJSONValue;
    olangs, olang: TJSONObject;
    nameAdded: Boolean;
    i: Integer;
    msg: string;
  begin
    v := json.GetValue(TKeyboardInfoFile.SLanguages);
  
    // Migrate languages[] array to Object
  
negative.code:   begin
      alangs := v as TJSONArray;
      olangs := TJSONObject.Create;
      o := TJSONObject.Create;
      try
        for i := 0 to alangs.Count - 1 do
        begin
          id := alangs.Items[i].Value;
          if id = '' then
            continue;
          AddSubtagNames(id, o);
          olangs.AddPair(id, o);
        end;
  
        json.RemovePair(TKeyboardInfoFile.SLanguages);
        json.AddPair(TKeyboardInfoFile.SLanguages, olangs);
  