3

英語とペルシア語の両方をサポートする必要があるサイトを構築しています。このサイトは、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」を追加しました。どちらも助けにはなりませんでした。

誰でもこれを解決する方法について何か考えがありますか? 可能であれば、英語の数字とペルシャの数字の間で変換テーブルを作成することは避けたいと思います。

よろしく、
エリック

4

4 に答える 4

3

さらに調査した結果、NativeDigits プロパティによって提供される特定のカルチャの数字の配列を使用して自分で行うことは十分に可能ですが、数字を翻訳しないという Microsoft の従業員からの回答を見つけました ( 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;
    }
}

また、モデル バインディングが行われる前に接続し、必要に応じてフォームからの数字のみの入力をラテン数字に変換します。

あこさん、どのような方向に進むのか、ウェブページの html タグの 'dir' 属性 (dir => 方向) を使用して、かなりの問題を解決することができました。このような:

<html dir="rtl">

「dir」属性は、「rtl」(右から左) または「ltr」(左から右) のいずれかを取ります。

これが誰かを助けることを願っています!

于 2011-02-25T09:33:45.390 に答える
1

たぶん、フォントを変更する必要があります。クライアントが Badr や Nazanin などの特定のフォントをサポートしていることがわかっている場合は、それらの番号の font-family を変更できます。それでうまくいくと思います。

ページのフォントを指定できますが、これは最新のブラウザーでのみ機能し、古いブラウザーでは失敗すると思います。これを確認できます。
それが役立つことを願っています。

于 2011-02-23T19:57:02.457 に答える
0

出力に数値をどのように印刷していますか?私はローカリゼーションの経験があまりありませんがNumberFormatInfo、番号をフォーマットするために適切なものまたは同様のものを使用する必要があるかもしれません。

また、移植性を最大限に高めるには、おそらくUTF8をエンコーディングとして使用する必要があります。

于 2011-02-23T20:01:46.170 に答える
0

まず第一に、ペルシャ数字をサポートするfont-faceを使用する必要があります。私はこのテクニックを使って、自分の Web サイトにペルシャ数字を表示することができます。Bナザニンのようなフォント。

于 2016-12-27T06:30:14.397 に答える