About ROM translation

There's three levels of translating: (1) editing tiles, (2) finding and replacing text, and (3) using a disassembler to identify specific characters to replace.

Editing tiles is easiest. You just open up a tile editor, do some pixel art editing, and whatever you change will show up in the game. No need to edit bytecode.

Next up in terms of ease is identifying the Japanese text, translating that into a sequence of bytecode, and replacing any occurrences of that sequence with a new sequence that points to English. To translate Japanese text into bytecode, you need to create table file, which is a map of Japanese characters to bytecode. The bytecode represents the address of the tile that displays a certain Japanese character. This is the Japanese table file. Some emulators have a tool that tells you the address of each tile, which makes it easier to create a table file.
Then, decide what you want to translate the Japanese text into. You probably can't use more tiles than the original text uses. Also, if the Japanese character uses a modifier (for example, to change the "h" sound into the "b" or "p" sound) then you might have to preserve that character in order to preserve the layout of text on the screen. Otherwise, text might get misasligned.
Once you've decided on the English text, then you need to translate that into bytecode. This means you need an English table file. But first you need to have changed some tiles to represent English letters. Then you can map English characters to bytecode.
Then, do a find and replace in a hex editor. Replace the bytecode representing the Japanese characters with the bytecode representing English characters.

The most challenging text to replace is when the text appears in a certain order on-screen, but that doesn't match up to what's in the code. For example, Ki-n should be two consecutive characters in Japanese, but they don't appear consecutively in the code. So you can't do a find and replace. Instead, you have to do disassembly and reverse engineer the code to find the two separate places to change the bytecode.

Orthogonal to the three approaches above, one challenge is replacing Japanese text with English text with more characters. You can replace one Japanese character with one English character by editing a tile, but if you need to replace one Japanese character with multiple English characters, then you need to use up more tiles and keep track of them separately from the individual letters. It's like expanding the English alphabet.

Requires Windows.

The best tutorial out there as of 2024

https://www.romhacking.net/documents/68/

High-level steps

https://www.romhacking.net/forum/index.php?topic=39864.0
https://www.romhacking.net/forum/index.php?topic=39866.0
https://www.reddit.com/r/romhacking/comments/1hsu31i/why_arent_i_able_to_translate_all_instances_of/
https://archive.rpgclassics.com/subsites/twit/docs/text/