2015-07-08 6 views
0

Я нашел несколько уроков и добавил два файла ресурсов в папку «Свойства» моего проекта и назвал их «Resources.tr-TR.resx» и «Resources.en-US.resx» и как по умолчанию мой «Resources.resx» также является файлом. Я установил модификатор доступа в «Public». И я называю это в моем XAML коде какИзменение языка программно Как английский на французский wpf

Content="{x:Static p:Resources.MainWindow}"

В моих файлах Он имеет значения, и изначально я могу видеть, что читает его правильно. У меня есть кнопка меню, которая меняет язык и в методе действий я пишу

private void englishLanguageMenuButton_Click(object sender, RoutedEventArgs e) 
{ 
     System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US"); 
} 

или в другом действии позволяет говорить

private void macedonianLanguageMenuButton_Click(object sender, RoutedEventArgs e) 
{ 
    System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("tr-TR"); 
} 

Однако система не работает. Чего не хватает ? Могу ли я динамически менять язык? Или как я могу изменить файл Resx динамически

Благодаря

ответ

1

Попробуйте

Добавьте этот код в Заявлении

/// <summary> 
    /// Wraps up XAML access to instance of WPFLocalize.Properties.Resources, list of available cultures, and method to change culture 
    /// </summary> 
    public class CultureResources 
    { 
     /// <summary> 
     /// Backing filed for provider 
     /// </summary> 
     private static ObjectDataProvider provider; 

     /// <summary> 
     /// Gets Resource provider 
     /// </summary> 
     public static ObjectDataProvider ResourceProvider 
     { 
      get 
      { 
       if (provider == null) 
       { 
        provider = (ObjectDataProvider)App.Current.FindResource("Resources"); 
       } 

       return provider; 
      } 
     } 

     /// <summary> 
     /// Change the current culture used in the application. 
     /// If the desired culture is available all localized elements are updated. 
     /// </summary> 
     /// <param name="culture">Culture to change to</param> 
     public static void ChangeCulture(CultureInfo culture) 
     { 
      ////remain on the current culture if the desired culture cannot be found 
      //// - otherwise it would revert to the default resources set, which may or may not be desired. 

      V_Parcel.Properties.Resources.Culture = culture; 
      ResourceProvider.Refresh(); 
     } 

     /// <summary> 
     /// The Resources ObjectDataProvider uses this method to get an instance of the WPFLocalize.Properties.Resources class 
     /// </summary> 
     /// <returns>Returns resource instance</returns> 
     public V_Parcel.Properties.Resources GetResourceInstance() 
     { 
      return new V_Parcel.Properties.Resources(); 
     } 
    } 

Добавить XAML CultureDictionary

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:resource="clr-namespace:Cultures"> 

    <!-- Resources ODP contains the current instance of the WPFLocalize.Properties.Resources class. 
     Used in bindings to get localized strings and automatic updates when the culture is updated --> 
    <ObjectDataProvider x:Key="Resources" ObjectType="{x:Type resource:CultureResources}" MethodName="GetResourceInstance" /> 

</ResourceDictionary> 

В вашей App.XAml

<ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="CultureDictionary.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 

Связывание должно быть как

Content="{Binding ShowTerminalName,Source={StaticResource Resources}}" 

И в случае изменения культуры написать эту

Thread.CurrentThread.CurrentCulture = new CultureInfo(currentCulture); 
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(currentCulture); 

        CultureInfo cultureInfo = new CultureInfo(currentCulture); 
        CultureResources.ChangeCulture(cultureInfo); 
+0

U писать "ShowTerminalName" на таких ресурсах, справа и назвал их как «Resource.en-US.resx "и" Resource.tr-TR.resx "? Я сделал это таким образом, но он не работал, я имею в виду, что во время выполнения он не работает. – albatross

+0

У меня есть ресурс с именем ShowTerminalName на обоих ресурсах. он работал отлично для меня во время выполнения. –

+0

Вы получаете какую-либо ошибку? –

 Смежные вопросы

  • Нет связанных вопросов^_^