2017-10-06 159 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}'之前出現 –