对,经过一番挖掘,我设法找到了一个可行的解决方案。
即使我的问题是关于最初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文本的字符串,然后如何生成字符串。 –