JSFiddle - React, Tailwind, and code Playground

JavaScript

function compare(objA, objB, path) {
    if (!path) path = '';
    return Object.keys(objA).reduce(function(arr, prop) {
		var subPath = prop + '.' + path;
        if (typeof objA[prop] != 'string' && typeof objA[prop] != 'number') {
            return arr.concat(compare(objA[prop], objB[prop], subPath));
        }
        if (objA[prop] === objB[prop]) return arr.concat(subPath);
        else return arr;
    }, [])
}

// objeto original
var i18n1 = {
    // índice único
    title: "Titulo qualquer",
    // índice com sub-índices
    words: {
        logout: "Encerrar sessão",
        open: "abrir",
        close: "fechar"
    },
    // índice com sub-índices e itens
    combo: {
        btn_top: "De volta ao topo",
        err_conn: {
            dberr: "Erro ao conectar a base de dados",
            reqerr: "Erro ao requisitar recurso"
        }
    }
}

// objeto original
var i18n2 = {
    // índice único
    title: "Titulo qualquer modificado",
    // índice com sub-índices
    words: {
        logout: "Encerrar sessão",
        open: "abrir janela",
        close: "fechar"
    },
    // índice com sub-índices e itens
    combo: {
        btn_top: "De volta ao topo",
        err_conn: {
            dberr: "Erro ao conectar a base de dados",
            reqerr: "Reco reco"
        }
    }
}

var kept = compare(i18n1, i18n2);
console.log(kept);