2
\$\begingroup\$

I want to use Persian/Arabic text beside English in whether Label or ui::Text.

Persian is a Right-to-Left and English is a Left-to-Right language and so I have problem to combine them in one string.

Scnario:

I want to show this text: 1."من1" then 2."emadpres2" and finally 3."3هستم".

If I write this text in a Left-to-Right editor it show as : ( Wrong Direction: =====> )

1من emadpres2 هستم3

But actually it should be shown as : ( Correct Direction: <===== )

هستم3 emadpres2 من1

This is my code :

auto rtl = Label::createWithSystemFont("سلام emadpres چطوری", B_NAZANIN, 25, Size(480, 100));
// The string here is also in wrong direction because the Visual Studio editor is Left-to-Right.
rtl->setColor(Color3B(0, 0, 0));
rtl->setPosition(...);
rtl->setHorizontalAlignment(TextHAlignment::RIGHT);
this->addChild(rtl, Z_NORMAL);

and this is the screenshot of this code:

enter image description here

As you see, I tried to use TextHAlignment but It doesn't help. I need something to change Direction not Alignment .

How should I make it Right-to-Left ?

PS: Cocos2dx v3.3

\$\endgroup\$

2 Answers 2

2
\$\begingroup\$

It's not the label that understand the text direction, but the OS. as you guessed Android check the first letter to guess how it should format the text, whether it's RTL or LTR.

Label::createWithSystemFont basically asks the OS to render the text for you. It's completely out of cocos2dx's control how the text is rendered, And thus it's completely OS dependent. If you want to write a code, which works on every platform, you should handle things yourself. Meaning you should separate the string over it's spaces (and direction independent characters e.g. punctuation marks) and place them carefully, one by one when they should be shown.

\$\endgroup\$
0
\$\begingroup\$

Although problem still exist in windows, But in Android everything magically is shown correctly independent of using English / Persian in any order.

I test it with Label::createWithSystemFont !

PS: I guess Label understanding the direction(LtR or RtL) by checking first letter maybe. I will test it and edit this answer soon.

\$\endgroup\$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .