### 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)
int64_t interface_features = FEATURE_SIMPLE_LAYOUT | FEATURE_BIDI_LAYOUT | FEATURE_VERTICAL_LAYOUT | FEATURE_SHAPING | FEATURE_KASHIDA_JUSTIFICATION | FEATURE_BREAK_ITERATORS | FEATURE_FONT_BITMAP | FEATURE_FONT_VARIABLE | FEATURE_CONTEXT_SENSITIVE_CASE_CONVERSION | FEATURE_USE_SUPPORT_DATA;
#ifdef MODULE_FREETYPE_ENABLED
	interface_features |= FEATURE_FONT_DYNAMIC;
#endif
#ifdef MODULE_MSDFGEN_ENABLED
	interface_features |= FEATURE_FONT_MSDF;
#endif
	return interface_features;
}
void TextServerAdvanced::_free_rid(const RID &p_rid) {
	_THREAD_SAFE_METHOD_
	if (font_owner.owns(p_rid)) {
		MutexLock ftlock(ft_mutex);
		FontAdvanced *fd = font_owner.get_or_null(p_rid);
		{
			MutexLock lock(fd->mutex);
			font_owner.free(p_rid);
		}
		memdelete(fd);
	} else if (shaped_owner.owns(p_rid)) {
		ShapedTextDataAdvanced *sd = shaped_owner.get_or_null(p_rid);
		{
			MutexLock lock(sd->mutex);
			shaped_owner.free(p_rid);
		}
		memdelete(sd);
	}
}
bool TextServerAdvanced::_has(const RID &p_rid) {