如何让字符串中的数字不转换为另一种语言(例如阿拉伯语)

How to have numeric digits in a string to not convert to another language (eg Arabic)

我有代码..

string text1 = "more text";
string text2 = string.Format("some text plus {0}", text1);

我把它转换成阿拉伯语:

string text1 = "المزيد من النص";
string text2 = string.Format("بعض النص بالإضافة إلى {0}", text1);

到目前为止没有问题!

然后我将计算机的语言从英语切换为阿拉伯语并查看代码,数字已自动更新为阿拉伯数字...

string text1 = "المزيد من النص";
string text2 = string.Format("{.} بعض النصوص بالإضافة إلى", text1);

(我不得不用一个句号来捏造这个,但是对于这个例子来说,0 的阿拉伯符号看起来很相似)。

问题是,当 Windows 选择的语言是阿拉伯语时,我收到字符串格式异常错误,因为格式命令无法识别零的阿拉伯语符号。

具体来说,我的问题是:如何确保输入的零保持为拉丁数字,即使是在非拉丁语言中?或者我怎样才能让它正常工作而不出错?

编辑:

直接从 IDE 剪切和粘贴:第一个 Windows 设置为英语,第二个图片,相同的代码,阿拉伯语...

String.Format(CultureInfo.InvariantCulture,"",) 应该是要走的路,但你需要将字符串分成两部分: 第一部分包含阿拉伯文本或英文文本。 第二部分应包含数字部分,这就是您应该格式化的部分。

这是 Microsoft 提供的文档,供您查看和确定要使用的特定区域性。 https://docs.microsoft.com/en-us/dotnet/api/system.string.format?view=net-5.0#System_String_Format_System_IFormatProvider_System_String_System_Object_

最终解决方案,感谢所有提出意见的人。

我换掉了所有标签 {0} 并替换为 string.Format(CultureInfo.InvariantCulture, "{0}", "{0}")

所以现在我上面给出的例子看起来像...

string text1 = "المزيد من النص";
string text2 = string.Format(String.Format(CultureInfo.InvariantCulture, "{0}", "{0}")  + " بعض النصوص بالإضافة إلى", text1);

实际代码的屏幕截图,而 Windows 的语言设置为阿拉伯语:

看来,通过以这种方式使用 string.Format,标签不会恢复为阿拉伯符号,当每个 属性 放入其自己的 string.Format 时,它运行不会产生错误。

我仍然不知道为什么我要这么麻烦,就像上面的评论一样,无论如何它都应该有效。如果我见过的话,这对我来说是一次很棒的黑客攻击!

我确实在次要标签上犯了一个最初的错误。我换出了 {1} 并替换为 string.Format(CultureInfo.InvariantCulture, "{1}", "{1}")。当然,这是一个子 string.Format 命令,它仍然只有一个标签。通过执行以下操作更正了愚蠢的错误...

string.Format(CultureInfo.InvariantCulture, "{0}", "{1}")