對,經過一番挖掘,我設法找到了一個可行的解決方案。
即使我的問題是關於最初AR-SA,它適用於任何從右到左的文化。
我結束了使用Unicode字符來明確說明部分字符串被留到右什麼,從右到左。
因此,使用常數 -
private const char LeftToRightCharacter = (char)0x200E;
private const char RightToLeftCharacter = (char)0x200F;
然後我就可以建立日期的字符串如下 -
if (culture.TextInfo.IsRightToLeft)
{
return
LeftToRightCharacter +
date.ToString("yyyy-", culture) +
RightToLeftCharacter +
date.ToString("MMM", culture) +
LeftToRightCharacter +
date.ToString("-dd", culture);
}
return date.ToString("dd-MMM-yyyy", culture);
...其中文化是的CultureInfo(與DateTimeFormat。日曆設置爲新的GregorianCalendar())並且日期是DateTime。
因此,對於日期06 - 2017年,在EN-GB我得到 -
06 - 2017年
和AR-SA我得到 -
2017-يونيو-06
現在,我已經得到了作爲一個字符串,我可以添加的T (左邊,如果培養物是RTL,右邊是培養物是LTR)。
這是看到的Unicode涉及這些字符與其他字符一起,我可以代替有用 - http://www.unicode.org/reports/tr9/
你有什麼期待* *看,爲什麼? (再加上確保明確你打算在哪裏顯示HTML,控制檯,WinForm,WPF,調試器等字符串......) –
嗯......用'ar-SA',一天應該是'11', 1438'。默認情況下,它使用'UmAlQuaraCalendar',而不是'GregorianCalendar'。你是否以某種方式改變了文化?請在此顯示,以便我們重現問題。 (但是,是的,我看到阿拉伯語文本被'MMM'推向右邊,仍然在看) –
你是如何渲染字符串的?在某種類型的桌面UI應用程序控制中?在一個網頁?它可能更多的是如何渲染一個帶有混合rtl/ltr文本的字符串,然後如何生成字符串。 –