2017-10-06 58 views
0

我不知道如何标题这个问题。我的应用程序使用.regx进行本地化,其中一些字符串包含{0-9}个标记,并被提供给string.Format。它运行良好,直到我收到第一个RTL翻译。 string.Format崩溃,抱怨字符串的格式不正确。下面是一个崩溃的字符串的一个例子:如何解决string.Format的{0}部分RTL和LTR

“{اعادهتسميه” {0

它看起来是正确的,但{0}一半实际上是分裂 - 这是RTL和LTR文本的混合。您可以通过选择并在字符串上拖动鼠标来查看问题。

我试图修复这些散装(使整个值RTL),但它被证明是令人惊讶的难做(和非常令人沮丧)。有没有解决这个问题的好方法?

+0

问题是字符串中的字节看起来像字符串以'“开始并且以{”结尾。我在Unicode中不流利,但[从左到右通过阿拉伯语/ RTL文本解析](https://stackoverflow.com/q/12630566/580951)建议使用从左到右的标记(U + 200E)分离出阿拉伯语。 – Romoku

回答

0

string.Format()对源字符串或参数无关紧要。例如,请考虑以下几点:

string.Format("لغه العربیه {0} زبان فارسی {1} کشور افغانستان {2}", p1, p2, p3);

任何字符串可以p1, p2, p3设置,任何从右到左或左到右的字符串。也opoosite的方式也起作用。我的意思是主字符串是从左到右的字符串,参数是从左到右或从右到左。

这里重要的一点是文本方向是一个UI而不是字符串本身的问题。 UI组件可能希望将字符串显示为从右向左或从左向右。

+0

您的示例可以工作,因为订单仍然正确 - 首尾括号仍然位于标签的其余部分旁边。 mscorlib.dll中的string.Format(“{معالجه{0”,p1)引发'System.FormatException' 附加信息:输入字符串格式不正确。 – Klocman

+0

你可以使用'string.Format(“معالجه{0}”,p1)''它不应该抛出任何异常。在这种情况下,''معالجه''在参数'{0}'之前出现 –