I'm fixing bug https://bugzilla.novell.com/show_bug.cgi?id=583209
the problem is with displaying a bidirectional text.
The dialog label contains Arabic traslation of "Joystick Configuration" which
written right-to-left (RTL) plus normal ASCII text with sound card model (written in
sformat(_("Joystick Configuration - %1 (snd-card-%2)"), cardname, card_id);
The problem is when the text is rendered on the screen the brackets are broken.
See the attached screen shots (there is English and Arabic version, the last
screenshot is fixed Arabic).
It's caused by the fact that punctuation characters in bidirectional text are
I.e. their direction depends on the direction of the surrounding text
and that can cause troubles when one side is LTR and the other one is RTL.
Fortunately Unicode has special controlling characters to explicitly set direction
for one or more characters.
To fix the problem with the string above I have added new
String::ForceLTRPunctuation() function which forces LTR direction on some punctuation
characters (,.()-) in the string using "LEFT-TO-RIGHT MARK" Unicode controlling
character. See the result in the last attached screenshot.
Another solution would be to directly fix the Arabic translation so it contains the
LTR mark in it. But I'm not sure if it is possible to put binary values into
translated pot file via some escape sequence... And some strings might be read from
an external source and might not be marked for translation, so we need to fix them
on the fly with the above function anyway...
Because I'm not an I18N expert I'm asking here for review of this fix.
I think the fix cannot be applied generally to any displayed text, sometimes the
default direction might be desired and this would break it.
The patch is attached for review.
Appliance department / YaST Developer
190 00 Prague 9 / Czech Republic
tel: +420 284 028 960