7

日付のフォーマットに関してMicrosoftConnectでリクエストを出しました(「DateTimeフォーマットはその日の正しいサフィックスを計算する必要があります」)。基本的に、日番号にサフィックスを追加するためのフォーマット文字列コードが必要でした。したがって、「1月1日」は「1月1日」にフォーマットされ、「1月2日」は「1月2日」にフォーマットされます。

これは英語の場合は非常に簡単ですが、Microsoftは、国際化するのが難しすぎるという理由でこのアイデアを拒否しました。

英語以外の市場に対応できないという理由だけで、Microsoftが英語の市場のためだけに書く英語のプログラマーの生活を困難にすることが合理的であることに人々が同意するかどうか疑問に思っていました。

編集:わかりました、私は彼らがやりたいことをするためのフレームワークがあるという議論を受け入れます。私はイデオロギー的な意味からもっと多くを求めていました。また、英語以外の文化には何も追加しないという簡単なフォールバックがあり、それによって人々は現在よりも悪化することはありません。

編集2:私にとって、これは1時間以上の作業です。次のようなコードをサポートする必要があります。

        DateTime minDate = new DateTime(2003, 12, 10);
        string errorMessage = ValidationMessageResource.DateTooEarly;            
        Console.WriteLine(String.Format(errorMessage, minDate));

リソースファイルの内容を制御することはできません。リソース文字列は、多くの場合、「日付は{0:D}より前であってはなりません」のようになります。これを行うには、Microsoftのフォーマッターが受け入れるすべての異なるフォーマット文字列をサポートする必要がある独自のIFormatProviderクラスを実装する必要があります。Microsoftは、継承を通じてフォーマッタを拡張する簡単な方法を提供していないようです。

4

9 に答える 9

18

1:それは彼らのフレームワークであり、彼らが行うことを選択することは、定義上合理的です。彼らは、彼らが気に入らないものを提供する義務を負っていません。

2:国際化できない機能は基本的に役に立たない。彼らが英語だけのためにそれを追加した場合、彼らが達成するのは、世界の他の地域がそれを国際化することを要求することであり、突然、彼らは世界の他の地域に劣った扱いをするのは悪く見えるでしょう。

3:国際化するの難しい。すべての言語が単に接尾辞を追加するとは限りません。接頭辞の場合もあれば、文のまったく異なる部分を変更する場合もあります。(または、別のポスターが指摘しているように、それは1番目ではなく「最初」である可能性があるため、英語でも厳格なルールはありません。なぜ彼らはあなたの任意のルールを実装する必要がありますが、英語に対して他の同等に有効なルールを実装する必要はありませんか? )。

3b:あなたは明らかにそれを気にしませんが、Microsoftは国際化を意識したフレームワークとして.NETを販売しています。つまり、彼らはあなたのニーズに合うように世界の90%を無視することはできません。

4:英語のみのバージョンを自分でコーディングするには、1時間かかりますね。;)

5:それはDateTimeとは何の関係もありません。これは、一般的な数値の文字列フォーマットの一般的なプロパティです

6:「彼らが英語の機能を追加した場合、他の誰もが現在よりも悪くなることはないだろう」というあなたの仮定は正しくありません。開発者は通常、正しく動作するために.NETに依存しています。フォーマットの提案が追加された場合、開発者は当然、すべての言語とロケールで機能することを期待します。したがって、開発者が問題がないと予想した場合、英語以外のすべての言語に対して無効または予期しない出力が生成されます。

于 2008-12-05T12:52:35.433 に答える
8

それが合理的であることに完全に同意します。自分で再利用可能なライブラリに必要なフォーマットを実装することを妨げるものは何もありません。

于 2008-12-05T12:50:26.093 に答える
3

「英語以外の市場に対応できないという理由だけで、英語市場向けに書いている英語プログラマーの生活をマイクロソフトが困難にするのは理にかなっていると人々が同意するかどうか疑問に思っていました.」

あなたは少し極端だと思いますが、私の意見では、それは本当に特殊なケースです。この種の日付の書式設定は、Microsoft に郵便番号/郵便番号のフォーマッタまたは Address クラスを要求するようなものです。確かに、郵便番号と住所をフォーマットするためのほとんどの国には規則がありますが、それはMSがそれを実装しなければならないという意味ではありません. これらのタイプのデータ構造を構築するためのフレームワークをすぐに利用できます。

于 2008-12-05T13:11:04.307 に答える
2

では、リストの1番目、2番目、3番目の項目の適切な英語は、1番目、2番目、3番目ではありませんか?

私はあなたが何を意味するのかを理解できますが、それをサポートする縮約の多くは、日時の問題よりも「できない、しない、ない」という問題です。

于 2008-12-05T12:52:16.997 に答える
1

MSもあなたも良い点を挙げたと思います。

私はMSに同意する傾向があります。この問題は、英語以外のソフトウェアの生活を困難にするものではありません。本当の問題は、新しいメソッドが異なる言語で機能しないことであり、それは受け入れられません。1つは機能がないこと、もう1つは特定の場合に機能しない機能があることです。

言語特有の機能を作ることは可能だと思います。ローカリゼーション.English.DateFormatterのようなものかもしれませんが、それは良い妥協案ですが、長期的にローカライズするのがより困難なソフトウェアを作成することにつながる可能性があります。

于 2008-12-05T12:54:13.637 に答える
1

これがどれほど難しいかをあなたに知らせるためだけに。

1月1日はイギリス英語にのみ有効です。アメリカ英語の正しい形式は1月1日です。

カナダ人はおそらく1erJanvierと妥協します。

于 2008-12-05T12:58:06.187 に答える
1

日付をフォーマットするための C 関数は strftime() です。これは、フォーマット%xする日付の部分とそれらをフォーマットする方法を示すために、' ' 表記を含むフォーマット文字列を取ります。%o' ' を数字 (1st, 2nd, 3rd, ...) を含む序数の形式項目として追加し、綴りの代替 (論理的には ' %O' ですが、既にユーザーにあると思います)を追加することは実行可能です。出力バージョン (最初、2 番目、...)。これは、日付フォーマットの他の部分と同じようにグローバル化できます。%o序数の書き方に関する情報がロケールにない場合、' 'のデフォルトの結果は完全に '接尾辞なし' になる可能性があります。「スペルアウト」の接尾辞なしの数字を使用することもできます

同等の機能が他の言語フレームワークに存在します。どのフレームワークでも同じように簡単に提供できます。

(誰かが月 (2009 年の最初の月) を序数化したい場合は、別の記号が必要になります。)

于 2008-12-05T15:03:02.677 に答える
1

ヤルフが言ったように、英語で何かをざわめくのにそれほど時間はかからないだろう. その後、これをオープン ソース プロジェクトとして使用できます (以前に使用されていない場合)。他の国のフォーマットを理解している開発者が貢献できるので、始める前にすべてを調べる必要はありません。

于 2008-12-05T13:07:57.557 に答える
0

マイクロソフトは、お客様に代わって作業を実施する義務を負いません。それは、フレームワークの上に自分で実装するものの1つである必要があります。

于 2008-12-05T12:56:48.470 に答える