1

私はいくつかのリソースファイルを持っています、例えば

default.aspx.resx、default.aspx.nl.resx、default.aspx.en.resx

これで、オランダのドメインにいるときに、default.aspx.nl.resxが読み込まれます。しかし、ここでdefault.aspx.en.resxから値にアクセスし、名前「title」に属する英語の値を取得したいと思います。

これを実現するには、現在のカルチャサーバー側を変更し、値にアクセスしてから、次のように元に戻します。

Dim culture As CultureInfo = New CultureInfo("en")
Threading.Thread.CurrentThread.CurrentCulture = culture
Threading.Thread.CurrentThread.CurrentUICulture = culture
Dim title as String = GetLocalResourceObject("title")
culture = New CultureInfo("nl")
Threading.Thread.CurrentThread.CurrentCulture = culture
Threading.Thread.CurrentThread.CurrentUICulture = culture

しかし、より良い/より速い方法はありますか?できれば、現在のスレッドのカルチャを変更する必要がないので、アクセスするリソースファイルと言語を定義できますか?

4

3 に答える 3

4

あなたはあなたのターゲット文化をパラメータに加えることができます

GetLocalResourceObject("title","YourCulture");

リンク: http: //msdn.microsoft.com/fr-fr/library/ms149953.aspx

于 2013-03-26T16:49:38.857 に答える
3

編集:(申し訳ありませんが、これとは異なる別の方法が必要だとは知りませんでしたが、これが私がなんとかした唯一の方法でした:)

私はこれを行うことによって何とかしました:

var userLanguage = "en-US";

System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo(userLanguage);
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo(userLanguage);

HttpContext.GetGlobalResourceObject("MyAppResource", "KeyThatIWantToGet");

MyAppResourceは、.resxファイルの名前の付け方であり、KeyThatIWantToGetがそれ自体を説明します。

于 2014-04-30T03:05:27.860 に答える
1

HttpContext(一般的な.NETアプリケーション)を使用しない場合は、次のヘルパーを使用します。

/// <summary>
/// Disposable class that lets us assume a specific culture while executing 
/// a certain block of code. You'd typically use it like this:
/// 
/// using (new CultureContext("de"))
/// {
///     // Will return the German translation of "Please click here"
///     string text = SharedResource.Please_click_here;
/// }
/// </summary>
public class CultureContext : IDisposable
{
    private readonly CultureInfo _previousCulture;
    private readonly CultureInfo _previousUiCulture;

    public CultureContext(CultureInfo culture)
    {
        // Save off the previous culture (we'll restore this on disposal)
        _previousCulture = Thread.CurrentThread.CurrentCulture;
        _previousUiCulture = Thread.CurrentThread.CurrentUICulture;
        Thread.CurrentThread.CurrentCulture = culture;
        Thread.CurrentThread.CurrentUICulture = culture;
    }

    public CultureContext(string cultureCode)
        : this(new CultureInfo(cultureCode))
    {

    }

    /// <summary>
    /// Syntactic sugar so that we can switch to a culture context as follows:
    /// 
    /// using (CultureContext.For("de"))
    /// {
    ///     // Will return the German translation of "Please click here"
    ///     string text = SharedResource.Please_click_here;
    /// }
    /// </summary>
    public static CultureContext For(string cultureCode)
    {
        return new CultureContext(cultureCode);
    }

    public void Dispose()
    {
        // Restore the culture settings that were in place before switching
        // to this context
        Thread.CurrentThread.CurrentCulture = _previousCulture;
        Thread.CurrentThread.CurrentUICulture = _previousUiCulture;
    }
}
于 2015-05-08T08:06:01.990 に答える