as we know arabic is lang from right to left format
in the game every thing is rendered from left to right (makes arabic unreadiable)
can any one make render from right to left
thanks
Salient comment by @AaronVanGeffen copied from #6571.
It's not just OpenRCT2's interface that needs adapting. SDL_ttf, the library we use to render text using TrueType fonts, doesn't support right-to-left rendering at all, either...
In other words, this won't be an easy fix!
looks like its not easy but how i am gona make it work in game is the part that unkown for my.
i can do somthing that can fix that temp but in long term its gona make issue (i mean by fix iam going to Reverse words in arabic from left to right so it can show up right) by using "Tadween" .
While perfect right-to-left would be preferable, of course, if there is something we can do to programmatically 'reverse' the character order for the text to make sense in left-to-right order, please do let us know. I'd rather tackle it on an exceptional basis (e.g. when processing the language file) rather than making the change the language file, as that would make it more difficult to translate, too…
i like to make a test for it first (Reverse words)
can any one point my to main menu strings in string number so i can revers them and test it (i dont use lastest bulid) i will give you the file so you can test it and we will se what we can do later.
STR_NEW_GAME = 5715
STR_LOAD_GAME = 882
STR_SAVE_GAME = 883
STR_SAVE_GAME_AS = 5512
STR_ABOUT = 847
STR_OPTIONS = 2327
STR_SCREENSHOT = 891
STR_GIANT_SCREENSHOT = 5260
STR_QUIT_TO_MENU = 5158
STR_EXIT_OPENRCT2 = 5159
ok looks good so how i will send the file?
Could you post a comment with the strings both before and after your changes to this issue? Just for the menu strings mentioned to keep it short, please.
You can surround the strings using backticks (```) to make a block like I did in my comment above.
STR_NEW_GAME = 5715 = ﺓﺪﻳﺪﺟ ﺔﺒﻌﻟ
STR_LOAD_GAME = 882 = ﺔﺒﻌﻟ ﻞﻴﻤﺤﺗ
STR_SAVE_GAME = 883 = ﺔﺒﻌﻠﻟﺍ ﻆﻔﺣ
STR_SAVE_GAME_AS = 5512 = ـﻛ ﺔﺒﻌﻠﻟﺍ ﻆﻔﺣ
STR_ABOUT = 847 = ﻝﻮﺣ
STR_OPTIONS = 2327 = ﺕﺍﺩﺍﺪﻋﻹﺍ
STR_SCREENSHOT = 891 = ﺔﺷﺎﺷ ﺔﻄﻘﻟ
STR_GIANT_SCREENSHOT = 5260 =ﺔﺷﺎﺷ ﺔﻄﻘﻟ
STR_QUIT_TO_MENU = 5158 = ﺔﻤﺋﺎﻘﻟﺍ ﻲﻟﺇ ﺝﻭﺮﺨﻟﺍ
STR_EXIT_OPENRCT2 = 5159 = ﺔﺒﻌﻠﻟﺍ ﻦﻣ ﺝﻭﺮﺨﻟﺍ
note this is revesed strings
show my a screenshot of render with reversed words
hi what happeend to the render
show my a screenshot of render with reversed words
First off, I realise English is not your first language, but this phrasing makes you sound very demanding. It is not an appropriate tone for this conversation.
hi what happeend to the render
Secondly, we're all doing this in our own free time. Bumping a ticket within 10 hours is frowned upon.
Having said that, on a recent build, you really should be able to test the changes to the language files yourself. Just modify the ar-EG.txt in the games language folder.
Anyway, here's the before / after screenshots:

And for the record, here's a diff of the language file:
diff --git a/data/language/ar-EG.txt b/data/language/ar-EG.txt
index f34bbb142..9b55fad55 100644
--- a/data/language/ar-EG.txt
+++ b/data/language/ar-EG.txt
-STR_0847 :عن 'OpenRCT2'
+STR_0847 :ﻝﻮﺣ 'OpenRCT2'
-STR_0882 :تحميل اللعبة
+STR_0882 :ﺔﺒﻌﻟ ﻞﻴﻤﺤﺗ
-STR_0883 :حفظ اللعبة
+STR_0883 :ﺔﺒﻌﻠﻟﺍ ﻆﻔﺣ
-STR_0891 :لقطة شاشة
+STR_0891 :ﺔﺷﺎﺷ ﺔﻄﻘﻟ
-STR_2327 :Options
+STR_2327 :ﺕﺍﺩﺍﺪﻋﻹﺍ
-STR_5158 :أخرج إلي القائمة
+STR_5158 :ﺔﻤﺋﺎﻘﻟﺍ ﻲﻟﺇ ﺝﻭﺮﺨﻟﺍ
-STR_5159 :أخرج من اللعبة
+STR_5159 :ﺔﺒﻌﻠﻟﺍ ﻦﻣ ﺝﻭﺮﺨﻟﺍ
-STR_5260 :لقطة شاشة عملاقة
+STR_5260 :ﺔﺷﺎﺷ ﺔﻄﻘﻟ
-STR_5512 :حفظ اللعبة كـ
+STR_5512 :ـﻛ ﺔﺒﻌﻠﻟﺍ ﻆﻔﺣ
-STR_5715 :لعبة جديدة
+STR_5715 :ﺓﺪﻳﺪﺟ ﺔﺒﻌﻟ
First off, I realise English is not your first language, but this phrasing makes you sound very demanding. It is not an appropriate tone for this conversation.
sorry for this as you know its not my first lang and i am sorry for make it sound very demanding
Secondly, we're all doing this in our own free time. Bumping a ticket within 10 hours is frowned upon.
as for render i looks good and working so what is next step in that issue? (i mean its render right postion for arabic so i will reverse arabic strings or what)
thank and i am sorry for any confuse
Alright, not to worry.
As for the strings, I'm happy to hear they're rendering properly in this way.
Let me ask you: what is easiest for you when you're translating? From my point of view, it would be very confusing if all strings were in the 'wrong order' in English… So, presumably, it would be a little confusing for you to reverse every string that you translate, right?
Instead, I propose to have OpenRCT2 reverse the order of Arabic strings as it reads the language files, effectively reversing the strings for you. We will only need to do this if the current language is set to Arabic, so there will be no performance penalty for other languages. (Technical note: U+0600..U+06FF; 256 code points.)
How does this sound to you, @Omaranwa? Let me ping our localisation manager, @Gymnasiast, as well.
Yes, keep the ar-EG.txt clean and without dirty hacks. We'll do the necessary processing in OpenRCT2 itself, where it belongs.
i know its hard to say but this method work and if we can add a code for revers words i will be super good
ok i donot know anything in coding or programing so what do you think?
@Gymnasiast
Just make sure it appears correctly in ar-EG.txt and we will take care of the rest.
i afierd it will take long time
To be clear: you don't have to reverse strings in ar-EG.txt. Just do what you do now.
ok but how much time it will take to make render work for arabic?
As in, optimal rendering? Don't count on that being this year.
I am now working on it: https://github.com/OpenRCT2/OpenRCT2/pull/7806
The current state is as follows: it has been implemented for Linux and macOS, but Windows still needs to be done. We could really use help with that one.
@peiman-soltani The way our code works is that Arabic strings are processed when loading the language pack. For the code to work, we'll need the conversion method to output as an UTF-8 string (or wchar string, if UTF-8 is not easy to do). Would you be able to change the code this way?
(I find the code you linked to a bit hard to read, mostly because of the formatting, the use of abbreviations and the low amount of comments. But those are all solvable, and I'll happily give more in-depth feedback if your approach can be made to work.)
@Gymnasiast This has been solved in v0.3.1, right?
Yes, this has now been implemented. There are still some bugs, but these should get their own issues.