web-dev-qa-db-ja.com

「Cultureはサポートされていません」と表示されるのはなぜですか。もしあれば、どうすればよいですか。

ここの「return」行にブレークポイントがあります。

[HttpGet]
[Route("api/Test/{id1}/{id2}")]
public NRBQEntity GetTestMessage(String id1, String id2)
{
    return NRBQClient.GetTestMessage(id1, id2);
}

アプリはクラッシュしませんが、その時点に達すると、

"例外:スロー:"カルチャはサポートされていません。 "(System.Globalization.CultureNotFoundException)System.Globalization.CultureNotFoundExceptionがスローされました:"カルチャはサポートされていません。 ""

どの文化がサポートされようとしているのか、なぜサポートされないのか、そして文化をサポートするために私は何をすべきですか?

更新

Sphanleyへの回答:

「NewRidersof the BarbeQue」の略であることに加えて、それは次のような「スケルトン」(今のところ)エンティティです。

public class NRBQEntity
{
    public NRBQEntity()
    {

    }

    public String Value { get; set; }
}

更新2

AnotherUserへの回答:

これは私のコードではないので、私はちょうどそれを悪用しようとしているところです。これは、既存のスタンドアロンプ​​ロジェクトをコピーしてリファクタリングし、それを「the」ソリューションに組み込むための開始点として提供されています。そうは言っても、あなたの質問に答えるために、ソリューション内の「GetTestMessage()」のすべてのインスタンスを次に示します。

[HttpGet]
[Route("api/Test/{id1}/{id2}")]
public NRBQEntity GetTestMessage(String id1, String id2)
{
    return NRBQClient.GetTestMessage(id1, id2); 
}

[HttpGet]
[Route("api/Test/{id1}/{id2}")]
public NRBQEntity GetTestMessage(String id1, String id2)
{
    return NRBQService.GetNRBQEntity(id1, id2);
}

public interface INRBQClient
{
    NRBQEntity GetTestMessage(String id1, String id2);
}

public NRBQEntity GetTestMessage(String id1, String id2)
{
    var res = RESTAPIClient.GET<NRBQEntity>(null
       , new Uri(NRBQClientSettings.NRBQAPI)
       , String.Format("api/Test/{0}/{1}"
                        , id1
                        , id2)
                        );

    if (res.status != RequestResultStatus.Success)
    {
        throw new Exception(res.message);
    }

    return res.result;
}

...そしてこのテスト:

[TestFixture, Category(DRBCOMMON.UnitTests.Categories.IntegrationTest)]
public class NRBQClientIntegrationTests
{    

    [Test]
    public void TestNRBQInterface()
    {
        var NRBQClient = IOC.container.Resolve<INRBQClient>();

        var s = NRBQClient.GetTestMessage("GET", "SORTY");

        Assert.Greater(s.Value.Length, 0);
    }
}
12
B. Clay Shannon

どの文化がサポートされようとしているのか

問題のある行の周りにtry/catchを配置し、例外をキャッチします。 catchブロック内にブレークポイントを配置し、コードをデバッグします。スローされたCultureNotFoundExceptionInvalidCultureNameプロパティを調べます。これにより、使用しようとしているがシステムに見つからないカルチャがわかります。

サポートされていないのはなぜですか

Windowsにはカルチャのセットが組み込まれています( 。NET 3.5のCultureInfoクラスでサポートされているカルチャは何ですか? および http://msdn.Microsoft.com/en-us/goglobal/ bb896001.aspx )。 InvalidCultureNameにリストされているカルチャがリストにない場合、サポートされていません。

文化をサポートするために、もしあれば、私は何をすべきですか?

これは、InvalidCultureNameが何であるかによって異なります。サポートされていない文化を合法的に使用しようとしている場合(たとえば、多言語/多地域のサイトがあり、すべての文化で英語をサポートしたい場合)、新しい文化を作成する必要があるかもしれません。たとえば、私はサイト http://www.oneill.com で作業しました。そこでは、オランダのサイトのフランス語版( http://www.oneill .com/nl-fr )。新しいカルチャを作成し、次の手順を使用してWebサーバーにインストールする必要がありました。 http://msdn.Microsoft.com/en-us/library/ms172469(v = vs.90).aspx ==

派手な文化的なことをしていない場合、存在しない可能性のあるディレクトリに基づいてフレームワークが誤ってCultureInfoインスタンスを作成することを含む、asp.netに関するいくつかの既知の問題があります。

その場合、解決策は例外をオフにして無視することであるように見えます。

5
Philip Pittle

既存のすべてのコードを確認できます このリスト内

次のように、カスタムカルチャを作成できます。

// Create a new colture, with the name you desire
CultureAndRegionInfoBuilder cib = new CultureAndRegionInfoBuilder("en-IN", CultureAndRegionModifiers.None);

// Load all defaults from en-US
CultureInfo ci = new CultureInfo("en-US");
cib.LoadDataFromCultureInfo(ci);

// Populate the new CultureAndRegionInfoBuilder object with region information.
RegionInfo ri = new RegionInfo("US");
cib.LoadDataFromRegionInfo(ri);

// Now you can make changes, or finish.
// Changes can be currency, RegionName, etc.

// Finish
cib.Register();

この記事 それを行う方法を説明します。

2
Koby Douek