Ссылка и перечисление для получения значения из файла resx - PullRequest
0 голосов
/ 29 марта 2020

Я хочу использовать enum в качестве ключа для получения значения из файла ресурсов в моем проекте. Я использую метод для получения значения из файла resx:

using System;
    using System.Reflection;
    using System.Resources;
    using System.Web;
    using Utility.Tools.ExtensionMethods;
    using Utility.Tools.Infrastructure;
    using Utility.Tools.Utilities.Storage;

    namespace MultiLanguage
    {
        public enum LocaleConfig_Type : byte
        {
            FA,

            AR,

            DARI
        }

        public class MultiLangToolkit
        {
            public static string GetTranslate(MainKeys key)
            {
                var lang = LanguegesToolkit.GetCurentLang();

                return GetTranslate(key, lang);
            }

            public static string GetTranslate(MainKeys key, LocaleConfig_Type locale)
            {
                try
                {
                    string value;
                    switch (locale)
                    {                        case LocaleConfig_Type.FA:
                            {
                                var fa_resx = new ResourceManager("MultiLanguage.FA", Assembly.GetExecutingAssembly());
                                value = fa_resx.GetString(key.ToString());
                            }
                            break;
                        case LocaleConfig_Type.AR:
                            {
                                var ar_resx = new ResourceManager("MultiLanguage.AR", Assembly.GetExecutingAssembly());
                                value = ar_resx.GetString(key.ToString());
                            }
                            break;
                        case LocaleConfig_Type.DARI:
                            {
                                var dari_resx = new ResourceManager("MultiLanguage.DARI", Assembly.GetExecutingAssembly());
                                value = dari_resx.GetString(key.ToString());
                            }
                            break;

                        default:
                            value = "No Language Selected!";
                            break;
                    }

                    if (!string.IsNullOrEmpty(value))
                        return value;

                    return "Key Or Value NotFound!";
                }
                catch (Exception)
                {
                    return "Exception when translate";
                }
            }
        }

        public class LanguegesToolkit
        {
            public static LocaleConfig_Type GetCurentLang()
            {
                try
                {
                    object sessionDefalutLocale = null;

                    if (HttpContext.Current.Session != null)
                    {
                        sessionDefalutLocale = HttpContext.Current.Session[SessionManager.SESSION_USER_DEFAULT_LOCAL];
                    }
                    if (sessionDefalutLocale != null)
                    {
                        return sessionDefalutLocale.ToString().ToEnum<LocaleConfig_Type>();
                    }
                    else
                    {
                        var defaultLocale = RequestGlobalProperties.CurrentUserRequest.DefaultLocale;

                        if (defaultLocale.IsNullOrEmpty())
                            return Constants.ServiceDefaultLocale.ToEnum<LocaleConfig_Type>();

                        return defaultLocale.ToEnum<LocaleConfig_Type>();
                    }
                }
                catch (Exception)
                {
                    return LocaleConfig_Type.FA;
                }
            }
        }
    }

, и у меня есть класс enum для хранения перечислений :

namespace MultiLanguage
{
    public enum MainKeys
    {
        /// <summary>
        /// login to account
        /// </summary>
        Sign_in,

        /// <summary>
        /// password
        /// </summary>
        Password,

        /// <summary>
        /// user name
        /// </summary>
        Username
}
}

, и я использую этот код для получения значения из моих файлов resx

 MultiLanguage.MultiLangToolkit.GetTranslate(MultiLanguage.MainKeys.Username)

, но такого типа кода слишком много для получения значения из моего файла resx, я просто хочу чтобы написать этот код мгновенно, код выше:

 MultiLanguage.MainKeys.Username 

просто вызовите enum и получите переведенное значение из файла resx. Я использую этот код в dll-файле, чтобы использовать его в других моих проектах, а также использовать enum как ключевые моменты строки, потому что строки не являются хорошим выбором и моей причиной и проблемой времени выполнения, и это трудно отладить. и используя summery для перечислений, чтобы увидеть, что это значение в файле resx (да, я копирую значение из моего файла rex в summery)
как я могу это сделать? это возможно?

1 Ответ

0 голосов
/ 29 марта 2020

Если вы действительно хотите придерживаться своих перечислений, то вы можете просто создать метод расширения, чтобы упростить использование. Что-то вроде

public static class EnumExtensions
{
  public static string Translate(this MainKeys key)
  {
    return MultiLanguage.MultiLangToolkit.GetTranslate(key);  
  }
}

, тогда вы можете просто использовать

MultiLanguage.MainKeys.Username.Translate();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...