Как узнать, какие культуры поддерживаются в webproject -> Class CultureInfo? - PullRequest
1 голос
/ 13 января 2011

в моем проекте у меня есть два поддерживаемых языка (немецкий - "de" и английский - "en") У меня есть файлы ресурсов, такие как: Home.aspx.de.resx, Home.aspx.en.resx, Home.aspx.resx

Можно ли динамически читать, какие языки поддерживаются в текущем веб-проекте? Я не хочу проверять это вручную, если они просто "de" и "en", как я делаю в следующем коде:

if (langName != "en" || langName != "de")
                    {
                        ci = new CultureInfo("en");

                        this.Session["Culture"] = ci;
                    }

Я хотел бы получить доступ к языкам веб-проектов, таким как: CultureInfo.(Who knows)... Если я добавлю новый язык, например Мне нужно снова добавить его в мою логику.

мой Application_AcquireRequestState метод выглядит так:

protected void Application_AcquireRequestState(object sender, EventArgs e)
        {
            if (HttpContext.Current.Session != null)
            {
                //Create culture info object 
                CultureInfo ci = (CultureInfo)this.Session["Culture"];

                //Checking first if there is no value in session 
                //and set default language 
                //this can happen for first user's request
                if (ci == null)
                {
                    //Sets default culture to english invariant
                    string langName = "en";

                    //Try to get values from Accept lang HTTP header
                    if (HttpContext.Current.Request.UserLanguages != null && HttpContext.Current.Request.UserLanguages.Length != 0)
                    {
                        //Gets accepted list 
                        langName = HttpContext.Current.Request.UserLanguages[0].Substring(0, 2);

                    }
                    if (langName != "en" || langName != "de")
                    {
                        ci = new CultureInfo("en");

                        this.Session["Culture"] = ci;
                    }
                    else
                    {
                        ci = new CultureInfo(langName);
                        this.Session["Culture"] = ci;
                    }
                }

                //Finally setting culture for each request
                Thread.CurrentThread.CurrentUICulture = ci;
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);

            }
        }

1 Ответ

2 голосов
/ 13 января 2011

Можете ли вы попытаться загрузить культуру для указанного языка и, если она не существует, загрузить стандартную версию? Я сделал это в одном из моих веб-приложений. Вы бы использовали что-то подобное на базовой странице.

        /// <summary>
    /// Initializes culture for the page
    /// </summary>
    [VersionChange( "6.1.34.89", "24/12/2009", "Custom Cultures added" )]
    protected override void InitializeCulture()
    {
        try
        {
            CultureInfo oCultureInfo;

            try
            {
                oCultureInfo = CultureInfo.CreateSpecificCulture( this.CurrentCustomCulture );
            }
            catch ( ArgumentException )
            {
                //Get culture info based on Great Britain
                CultureInfo cultureInfo = new CultureInfo( "en-GB" );
                RegionInfo regionInfo = new RegionInfo( cultureInfo.Name );

                CultureAndRegionInfoBuilder cultureAndRegionInfoBuilder = new CultureAndRegionInfoBuilder( this.CurrentCustomCulture, CultureAndRegionModifiers.None );

                cultureAndRegionInfoBuilder.LoadDataFromCultureInfo( cultureInfo );
                cultureAndRegionInfoBuilder.LoadDataFromRegionInfo( regionInfo );

                // Custom Changes
                cultureAndRegionInfoBuilder.CultureEnglishName = this.CurrentCustomCulture;
                cultureAndRegionInfoBuilder.CultureNativeName = this.CurrentCustomCulture;

                cultureAndRegionInfoBuilder.Register();

                oCultureInfo = CultureInfo.GetCultureInfo( this.CurrentCustomCulture );
            }
            catch ( Exception )
            {
                throw;
            }

            Thread.CurrentThread.CurrentCulture = oCultureInfo;
            Thread.CurrentThread.CurrentUICulture = oCultureInfo;

            Page.Culture = oCultureInfo.Name;
            Page.UICulture = oCultureInfo.Name;

            base.InitializeCulture();
        }
        catch ( Exception )
        {
            throw;
        }
    }

Если вы хотите прочитать доступные культуры с сервера, вы можете использовать

<code>
using System.Globalization;</p>

<p>CultureInfo.GetCultures( CultureTypes.AllCultures );</p>

<p>and CultureInfo.GetCultures( CultureTypes.UserCustomCulture );
...