### Godot version

v4.2.dev4.official [549fcce5f]

### System information

Ubuntu 20.04 LTS

### Issue description

See title.

### Steps to reproduce

1. Create a new project
2. Create a csv file that includes the following
```
key,ar
key,placeholder
```
3. Add the generated `.translation` file to Project -> Project Settings... -> Localization
4. In Project -> Project Settings... -> Internationalization -> Locale, set `Test` to `ar`
5. Add a `LineEdit` node and type `-=[]{}`
6. Run the project, and notice that the text is on the right side, but the symbols are incorrectly in LTR (`-=[]{}`).  Correct output is `{}[]=-`
7. Back in the editor, add a single Arabic letter (any will do), and notice that `LineEdit` immediately (and correctly) flips the symbols, and the newly-added Arabic letter, to RTL.

**Notes**
- Identical behavior is seen with `TextEdit`.
- The purpose of steps 2-4 are to simulate an Arabic environment when the project is run, despite `OS.get_locale() == "en"` (or your system's current language).

### Minimal reproduction project

[rtlsymbols.zip](https://github.com/godotengine/godot/files/12525509/rtlsymbols.zip)
String font_name = _font_get_name(fdef);
			BitField<FontStyle> font_style = _font_get_style(fdef);
			int font_weight = _font_get_weight(fdef);
			int font_stretch = _font_get_stretch(fdef);
			Dictionary dvar = _font_get_variation_coordinates(fdef);
			static int64_t wgth_tag = _name_to_tag("weight");
			static int64_t wdth_tag = _name_to_tag("width");
			static int64_t ital_tag = _name_to_tag("italic");
			if (dvar.has(wgth_tag)) {
				font_weight = dvar[wgth_tag].operator int();
			}
			if (dvar.has(wdth_tag)) {
				font_stretch = dvar[wdth_tag].operator int();
			}
			if (dvar.has(ital_tag) && dvar[ital_tag].operator int() == 1) {
				font_style.set_flag(TextServer::FONT_ITALIC);
			}
			char scr_buffer[5] = { 0, 0, 0, 0, 0 };
			hb_tag_to_string(hb_script_to_iso15924_tag(p_script), scr_buffer);
			String script_code = String(scr_buffer);
			String locale = (p_sd->spans[p_span].language.is_empty()) ? TranslationServer::get_singleton()->get_tool_locale() : p_sd->spans[p_span].language;
			PackedStringArray fallback_font_name = OS::get_singleton()->get_system_font_path_for_text(font_name, text, locale, script_code, font_weight, font_stretch, font_style & TextServer::FONT_ITALIC);
#ifdef GDEXTENSION
			for (int fb = 0; fb < fallback_font_name.size(); fb++) {
				const String &E = fallback_font_name[fb];
#else
			for (const String &E : fallback_font_name) {
#endif
				SystemFontKey key = SystemFontKey(E, font_style & TextServer::FONT_ITALIC, font_weight, font_stretch, fdef, this);
				if (system_fonts.has(key)) {