2016-03-31 10 views
0

ASP.NET MVCアプリケーションをローカライズしようとしています。AzureのASP.NET MVCアプリケーションをローカライズすると機能しない

[Internationalization] 
public abstract class BaseController : Controller 
{ 
    ... 
} 

私はLANG Cookieを設定しています:

public class InternationalizationAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var cookie = filterContext.HttpContext.Request.Cookies.Get("lang"); 
     string language = cookie == null ? "en" : cookie.Value; 

     Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(string.Format(language)); 
     Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(string.Format(language)); 
    } 
} 

私はこのフィルタを使用しています BaseControllerクラスを持っている:

私は国際と呼ばれるアクションフィルタを作成しました内でActionResult私のHomeCo ntroller:

public ActionResult SetLanguage(string lang) 
{ 
    HttpCookie cookie = new HttpCookie("lang", lang); 
    cookie.Expires = DateTime.Now.AddDays(30); 
    this.HttpContext.Response.Cookies.Add(cookie); 
    return this.Redirect(this.Request.UrlReferrer.LocalPath); 
} 

私は<のsystem.web私のWeb.configの>に次をも追加しました:

<globalization enableClientBasedCulture="true" uiCulture="auto" culture="auto" /> 

最後に、私は必要なリソースを作成しました私のApp_GlobalResourcesフォルダと私のページでそれらを使用しています。

アプリケーションをローカルにビルドするときに、これはうまく動作します。SetLanguageアクションを呼び出し、アプリケーションの言語が選択された言語に変更されるドロップダウンを使用して新しい言語に切り替えます。

しかし、いったんAzureにデプロイしても、同じアプローチはもう機能しません。クッキーが設定されていても、アプリケーションはデフォルト言語(英語)のままです。

誰かが問題を明らかにできるのであれば、本当に感謝しています。同様の効果を達成するためのよりよい方法への提案も高く評価されます。

ありがとうございます!

+0

web.configの「グローバリゼーション」ノードを(BaseControllerの)残りのコードと一緒に削除してみましたか? –

+0

いくつの言語を使用しますか?それはdosentの仕事を表示する言語と切り替えるか、切り替え時に間違った言語を使うのでしょうか?何が効いていないのですか?それは非常に多くのことができます:) – Christian

+0

私はそれに応じて私の質問を更新しました。フィードバックいただきありがとうございます。 –

答えて

0

問題は、グローバルリソースを正しく構築して配置するようにセットアップしていない可能性が最も高いです。 http://odetocode.com/blogs/scott/archive/2009/07/16/resource-files-and-asp-net-mvc-projects.aspxをご覧ください。

自分のアセンブリ内のリソースを使用して、MVCプロジェクトでデプロイされている(アクセス可能である)ことを確認することをお勧めします。

関連する問題