C # локализация не работает - PullRequest
0 голосов
/ 01 декабря 2011

-EDIT 2- разобрался, проверь мой ответ.Я должен перестать задавать вопросы о StackOverflow, я всегда выясняю это через пару минут:)

У меня есть следующий код (ну, примерно, с обнаружением и всем наверху):

Manager = new ResourceManager("EM250.Localization.Application", 
                              Assembly.GetExecutingAssembly());

// CurrentCulture being fr-CA in this case
return Manager.GetString(Key, CurrentCulture); 

Итак, я управляю своими ресурсами локализации, используя собственный класс, который я создал.

Я получил два файла, один из которых называется «Application.resx», а другой - «Application.fr-CA.resx».Оба установлены на «Встроенный ресурс».Когда я компилирую свой код, я получаю папку с именем «fr-CA» с файлом «Library.resources.dll».Что вполне нормально.

У кого-нибудь есть идеи, почему мой код не работает?Я получаю английские строки везде.

Обратите внимание, что это не проект ASP.NET, а настоящий проект WinForms.

-EDIT- Должен, вероятно, опубликовать остальную часть кода это инициализация моегоПриложение:

        String LocaleLoad;

        if(Configuration.GetString("Language") == null)
        {

            // Detect which if the computer is set in french.
            switch(System.Threading.Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName)
            {
            case "fr":
                LocaleLoad = "fr-CA";
                break;

            default:
                LocaleLoad = "en-CA";
                break;
            }

        }
        else
        {

            LocaleLoad = Configuration.GetString("Language");

        }

        // Initialize the localization class.
        Localization.Initialize(LocaleLoad);

А это мой класс по локализации:

    /// <summary>
    /// Initialize the culture info with the specific culture.
    /// </summary>
    /// <param name="Culture">The culture to load.</param>
    public static void Initialize(string Culture)
    {

        CultureInfo NewCulture = new CultureInfo(Culture);

        if(!(Localization.CurrentCulture == null || CurrentCulture.TwoLetterISOLanguageName == NewCulture.TwoLetterISOLanguageName))
        {

            CurrentCulture = NewCulture;

            Thread.CurrentThread.CurrentCulture = NewCulture;
            Thread.CurrentThread.CurrentUICulture = NewCulture;

            OnCultureChanged();

        }

        Thread.CurrentThread.CurrentCulture = NewCulture;
        Thread.CurrentThread.CurrentUICulture = NewCulture;

        CurrentCulture = NewCulture;

        foreach(Language Lang in ListLanguages)
        {
            if(Lang.DisplayName == CurrentCulture.NativeName)
            {
                CurrentLanguageValue = Lang;    
            }
        }

        Manager = new ResourceManager("EM250.Localization.Application", Assembly.GetExecutingAssembly());

    }

    /// <summary>
    /// Get a single entry from the ressource file.
    /// </summary>
    /// <param name="Key">The value to get from the ressource file.</param>
    public static string GetString(string Key)
    {

        return Manager.GetString(Key, CurrentCulture);  
    }

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

Если вы установите свою культуру вручную, не забудьте также установить CurrentUICulture:

Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-CA");

После этого будет получен правильный ресурс.

0 голосов
/ 01 декабря 2011

Мой Ressource ID не был правильно установлен для моего файла fr-CA.Мой файл en-CA был установлен на «EM250.Localization.Application.resources», а fr-CA был «Library.Localization.Application.fr-CA.resources»

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