【问题标题】:Changing culture only changing the language of model items改变文化只会改变模型项目的语言
【发布时间】:2017-08-28 07:42:39
【问题描述】:

我已经在我的 Asp.net 应用程序中实现了文化。但我想要的是改变整个页面的语言,但它只改变模型项的语言。

CultureHelper.cs

 public class CultureHelper
 {
        protected HttpSessionState session;

        public CultureHelper(HttpSessionState httpSessionState)
        {
            session = httpSessionState;
        }
        public static int CurrentCulture
        {
            get
            {
                switch (Thread.CurrentThread.CurrentUICulture.Name)
                {
                    case "en": return 0;
                    case "hi-IN": return 1;
                    default: return 0;
                }
            }
            set
            {
                if (value == 0)
                {
                    Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en");
                }
                else if(value==1)
                {
                    Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("hi-IN");
                }
                else
                {
                    Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.InvariantCulture;
                }
                Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture;
            }
        }
    }

BaseController.cs

protected override void ExecuteCore()
        {
            int culture = 0;
            if (this.Session == null || this.Session["CurrentCulture"] == null)
            {

                int.TryParse(System.Configuration.ConfigurationManager.AppSettings["Culture"], out culture);
                this.Session["CurrentCulture"] = culture;
            }
            else
            {
                culture = (int)this.Session["CurrentCulture"];
            }
            // calling CultureHelper class properties for setting  
            CultureHelper.CurrentCulture = culture;

            base.ExecuteCore();
        }

        protected override bool DisableAsyncSupport
        {
            get { return true; }
        }

我的模型课

 [Display(Name="Name",ResourceType =typeof(Resource))]  

仅针对模型类属性更改语言。但我也想更改静态/非模型属性的语言。就像我也想更改按钮文本一样。我已经在资源文件中添加了所有内容。我怎样才能做到这一点?

【问题讨论】:

  • 所以你的按钮已经在使用类似这样的资源文件了? <button type="submit">@Resources.Submit</button>
  • 这是我写的<input type="submit" value="Delete" class="btn btn-danger" />
  • 如何在视图中引用资源文件?
  • @using MyProject.Resources
  • 您必须为不同的文化添加多个资源文件(Resources.en.resxResources.hi-IN.resx 等)。框架将根据集合CurrentCulture 解析使用哪个资源文件。如果找不到文化特定文件,Resources.resx 将用作后备。

标签: asp.net-mvc globalization


【解决方案1】:

为您想要支持的每种文化添加资源文件,例如

Resources.en.resx 
Resources.hi-IN.resx

框架将根据集合CurrentCulture 解析要使用的文件。 如果找不到特定文化的文件,Resources.resx(没有文化名称)将用作后备。

使用资源文件检索您翻译的字符串,例如在您的 View.cshtml 中:

@using MyProject.Resources

<button type="submit">
    @Resources.Submit @* this retrieves the translation for the key "Submit" *@
</button>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 2013-09-07
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    相关资源
    最近更新 更多