如何让字符串中的数字不转换为另一种语言(例如阿拉伯语)
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}")
我有代码..
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}")