Many moons ago, a small project called GNU Gettext did this. It worked by annotating the translatable string literals like this _("SomeLine"), then a separate compiler extracted all the strings into a `.po` file.
And then you just translated them. The English text, essentially, becomes your string ID.
It worked super well, with very low friction for programmers. You didn't have to invent an identifier when writing code, and then switch to a horrible JSON with indefinitely long lists of strings.
But somehow, the world chose the horribly bad "string IDs" method of translation. Sigh.