Getting the Ender 3 Pro Language Settings to Work
The menu language on an Ender 3 Pro is controlled through the Marlin firmware configuration files. The printer ships with English enabled by default, but if you've reflashed or modified the firmware, you might find yourself staring at Russian characters or blank menu screens. Here's how to actually fix it without spending three hours debugging. You'll need the Marlin source code. Grab it from GitHub — the latest 2.x branch. Clone the repo, open src/Marlin/src/lcd/language/language.h, and scroll down to the language defines. You'll see something like #define LANGUAGE_SOURCE_CODE near the top. That's what controls which language file gets compiled in. Set it to 0 for English, or reference any of the included language files if you want something else. Save the file, recompile, and flash the firmware back to the printer using a USB stick or directly via UART. That's the basic process. It works, but it's not the only way, and sometimes it causes more problems than it solves.
I ran into this issue last year when a buddy sent me his Ender 3 Pro to help with a bed leveling mod. The firmware on it was some hacked-together version from a random forum, and every menu item was displaying in Cyrillic. I tried the language.h approach first, compiled it, flashed it, and got nothing. The screen stayed Russian. The problem turned out to be that the Marlin build had LANGUAGE_SOURCE_CODE commented out entirely, which makes Marlin fall back to whatever default is baked into the binary — and in this case, it was Russian. The workaround was to find the actual source file that was being used to build that binary. I searched through the .o files in the compiled output and traced the locale setting back to a custom define in configuration.h. Once I found it, the fix was straightforward — just add #define LANGUAGE_SOURCE_CODE and set it to the right value. Here's a practical step-by-step for people who are starting from scratch:
First, get the Marlin firmware source from github.com/MarlinFirmware/Marlin. Make sure you're pulling the right version for your printer. The Ender 3 Pro uses an ATmega2560 board, so you'll want the MKS_BASE or CREALITY_V4 board definition depending on whether you've upgraded the motherboard or not. Open platformio.ini if you're using PlatformIO, or the Arduino IDE sketch if you prefer that. Look for the default_frame_height and LCD_LANGUAGE defines in configuration.h. The LCD_LANGUAGE value controls the menu language. It's usually set to an integer that maps to a language index defined in language.h. For English, that's typically 1. For Russian it's 4. Some of the newer firmware versions use string-based defines instead of integers, so check both. The Marlin documentation on this is painfully sparse, which is why so many people end up with language issues in the first place.
Get the Full Details

After you change the setting, compile and flash. Use PlatformIO if you can — it handles dependencies better than the Arduino IDE does, and it'll catch configuration errors before they make it into your binary. A bad compile doesn't always show an error message; sometimes it just silently produces firmware that does something unexpected. One thing nobody tells you about this process: the EEPROM on the printer can interfere. If you change the language setting after the printer has already been running with a different language, the old settings in EEPROM might override your changes. Clear the EEPROM by holding the encoder button while powering on the printer, or by sending an M502 command over the serial connection followed by M500. This resets all stored settings to factory defaults, which means you'll have to redo your bed leveling and axis offsets, but it's the most reliable way to make sure your language change actually takes effect. Another counter-intuitive thing: flashing newer firmware doesn't always fix language problems. The language is compiled into the firmware binary, so if someone flashed a Chinese-market version of Marlin (common with Creality printers), the English language file might not even be included in that build. I encountered this on a printer that came with firmware labeled "3.8.2" — it was missing the entire English language section, and all the menu text was hardcoded in Chinese. The only fix was to either recompile from the full Marlin source or find a community-built English-language binary.
There's also the matter of custom LCD screens. If you've swapped out the stock 128x64 LCD for a bigger display or a TFT touch screen, the language settings live in a completely different part of the firmware now. RepRapDiscount full graphics screens use a different include path, and TFT screens like the E3D Hemera or the Creality touch displays have their own configuration files. In those cases, you're not editing language.h anymore — you're dealing with something like src/tft/utf8_to_gbk.cpp or custom font definitions. The solution space gets much wider and much less documented. If you just want a quick fix without recompiling anything, there are third-party firmware packages floating around that have English pre-enabled. Creality's own firmware downloads from their website sometimes include English language files, though they're not always up to date. Creality's official support page for the Ender 3 Pro has firmware in the downloads section, but the English version isn't always the latest build — they tend to push updated firmware for their home market first. The most reliable long-term solution is to maintain your own Marlin configuration. Keep a fork of the Marlin repo with your settings committed, so you can rebuild whenever you need to. This saves you from the occasional nightmare where you've forgotten what firmware is actually running on a printer and can't tell if the problem is language-related or something else entirely.
One final note: the language setting doesn't affect G-code interpretation. Your printer will still understand standard G-code commands regardless of what language the menu is in. This is useful to know because it means you can troubleshoot language issues without worrying about breaking the actual printing functionality.
