我正在建立一个需要支持英语和波斯语的网站。该站点使用ASP.NET MVC 3和.NET 4(C#)构建。我的所有控制器都继承自BaseController,它将文化设置为“fa-IR”(在测试期间):
Thread.CurrentThread.CurrentCulture = new CultureInfo("fa-IR");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fa-IR");
在我的视图中,我正在使用静态帮助程序类转换为正确的时区并格式化日期。像:
DateFormatter.ToLocalDateAndTime(model.CreatedOnUtc)
我用MoneyFormatter做同样的钱。为了钱,这种货币在波斯语中正确打印(或者,至少我认为是因为我不知道任何波斯语。稍后我们的翻译将对其进行验证)。日期也是如此,月份正确打印。这是它目前显示的内容:
为了钱:
قیمت: ريال 1,000
日期:
21:01 ديسمبر 3
在这些例子中,我希望数字也用波斯语打印。你是如何做到的?
我也尝试过添加:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256" />
在某些论坛上推荐的HEAD标签中的。虽然没有改变任何东西(从我能看到的)。我还在我的浏览器语言(IE和Firefox)中添加了“fa-IR”作为第一种语言。也没有帮助。
有人对如何解决这个问题有任何想法吗?如果可能的话,我宁愿避免在英文数字和波斯数字之间创建翻译表。
最好的问候,
埃里克
答案 0 :(得分:3)
经过一些进一步的研究后,我找到了一位微软员工的回答,声称他们没有翻译数字,尽管完全有可能使用NativeDigits属性提供的特定文化的数字数组(见http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.nativedigits.aspx)。
要查明表单中提交的文字是阿拉伯语还是拉丁文,我现在正在做:
public bool IsContentArabic(string content)
{
string pattern = @"\p{IsArabic}";
return Regex.IsMatch(
content,
pattern,
RegexOptions.RightToLeft | RegexOptions.IgnoreCase | RegexOptions.Multiline);
}
public bool IsContentLatin1(string content)
{
string pattern = @"\p{IsBasicLatin}";
return Regex.IsMatch(
content,
pattern,
RegexOptions.IgnoreCase | RegexOptions.Multiline);
}
为了将波斯数字转换为“拉丁”等价物,我写了这个帮手:
public static class NumberHelper
{
private static readonly CultureInfo arabic = new CultureInfo("fa-IR");
private static readonly CultureInfo latin = new CultureInfo("en-US");
public static string ToArabic(string input)
{
var arabicDigits = arabic.NumberFormat.NativeDigits;
for (int i = 0; i < arabicDigits.Length; i++)
{
input = input.Replace(i.ToString(), arabicDigits[i]);
}
return input;
}
public static string ToLatin(string input)
{
var latinDigits = latin.NumberFormat.NativeDigits;
var arabicDigits = arabic.NumberFormat.NativeDigits;
for (int i = 0; i < latinDigits.Length; i++)
{
input = input.Replace(arabicDigits[i], latinDigits[i]);
}
return input;
}
}
我还在模型绑定发生之前就已经上钩了,如果适用,我会将表格中的数字输入转换为拉丁数字。
Ako,我们设法在我们的网页的html标签上使用'dir'属性(dir =&gt;方向)解决了很多问题。像这样:
<html dir="rtl">
'dir'属性采用“rtl”(从右到左)或“ltr”(从左到右)。
希望这有助于某人!
答案 1 :(得分:1)
也许你必须改变字体。 如果您知道您的客户端支持特定字体,比如说Badr或Nazanin,那么您可以更改这些数字的字体系列,我认为这对您有用。
您可以提供页面的字体,但我认为这只适用于现代浏览器,而旧版本则无效。你可以check这个 希望有所帮助。
答案 2 :(得分:0)
如何将数字打印到输出?我没有太多的本地化经验,但您可能必须使用适当的NumberFormatInfo
或类似的东西来格式化数字。
同样为了获得最大的可移植性,您应该使用UTF8作为编码。
答案 3 :(得分:0)
你应该使用支持波斯语号的 font-face 。 我使用这种技术,我可以在我的网站上显示波斯语号码。 字体如:BNazanin。