2016-10-21 11 views
4

Я пытаюсь использовать .resx файлы для локализации в xamarin.macлокализация Xamarin.mac ресурсов не изменяется текущей культуры

Внутри AppDelegate я изменил текущую культуру резьбы:

System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo ("ru"); 
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo ("ru"); 

также у меня есть два файла ресурсов внутри моего приложения:

enter image description here

Но строки всегда отображаются из файла ресурсов по умолчанию. .. Любое решение?

Я также использовать родной язык изменения, здесь весь AppDelegate конструктор:

public AppDelegate() 
     { 

      string [] lang = { "ru", "en" }; 
      NSUserDefaults.StandardUserDefaults.SetValueForKey (NSArray.FromObjects (lang), (Foundation.NSString)"AppleLanguages"); 
      NSUserDefaults.StandardUserDefaults.Synchronize(); 

      System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo ("ru"); 
      System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo ("ru"); 

      Resources.Culture = GetCurrentCultureInfo(); 

     } 

BTW, Xamarin студия 6.1.1 (сборка 15) не позволяет мне добавить resource.ru.resx, если у меня есть resource.ru в моем проекте, любопытная ошибка!

Я создал файл resource-ru.resx и переименовал его.

ответ

1

Необходимо установить культуру приложения после извлечения из ОС, что-то вроде этого (предупреждение, это от Xamarin iOS, но для документации он работает одинаково, если не советовать мне, и я удалю сообщение):

//Add this somewhere 
    public System.Globalization.CultureInfo GetCurrentCultureInfo() 
    { 
     var netLanguage = "en"; 

     if (NSLocale.PreferredLanguages.Length > 0) { 
      var pref = NSLocale.PreferredLanguages [0]; 
      netLanguage = pref.Replace ("_", "-"); // turns en_US into en-US 
     } 

     try 
     { 
      return new System.Globalization.CultureInfo(netLanguage); 
     }catch{ 

      try{ 

       return new System.Globalization.CultureInfo(netLanguage.Substring(0, netLanguage.IndexOf("-"))); 

      } 
      catch{ 

       return new System.Globalization.CultureInfo("en"); 

      } 

     } 
    } 

    //And finally add this at the start of the app 
    AppResources.Culture = GetCurrentCultureInfo(); 
+0

спасибо за ответ @Gusman .. но это не работает для меня :(вот еще одна задача, я также использовать родной язык изменения: строка [] = {Ланг "RU", "EN"}; \t \t \t NSUserDefaults.StandardUserDefaults.SetValueForKey (NSArray.FromObjects (Lang), (Foundation.NSString) «AppleLanguages»); \t \t \t NSUserDefaults.StandardUserDefaults.Synchronize(); После этого я установил код, который вы написали: Resources.Culture = GetCurrentCultureInfo(); – Nininea

+0

вот что-то не получается получить resources.ru.resx файл :( – Nininea

0

Вероятно, вы работаете в

https://bugzilla.xamarin.com/show_bug.cgi?id=45696

вы можете работать вокруг него, используя шаг пользовательских MSBuild. Показанный здесь (из-за длины):

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
 
\t <PropertyGroup> 
 
\t  <CreateAppBundleDependsOn>$(CreateAppBundleDependsOn);WorkAroundLocalizationBug-ES;WorkAroundLocalizationBug-FR</CreateAppBundleDependsOn> 
 
\t </PropertyGroup> 
 

 
\t <Target Name="WorkAroundLocalizationBug-ES" Inputs="$(OutputPath)es/XMLocalizationSample.resources.dll" Outputs="$(AppBundleDir)/Contents/MonoBundle/es/XMLocalizationSample.resources.dll"> 
 
\t  <Copy SourceFiles="$(OutputPath)es/XMLocalizationSample.resources.dll" DestinationFiles="$(AppBundleDir)/Contents/MonoBundle/es/XMLocalizationSample.resources.dll" /> 
 
\t </Target> 
 
\t <Target Name="WorkAroundLocalizationBug-FR" Inputs="$(OutputPath)fr/XMLocalizationSample.resources.dll" Outputs="$(AppBundleDir)/Contents/MonoBundle/fr/XMLocalizationSample.resources.dll"> 
 
\t  <Copy SourceFiles="$(OutputPath)fr/XMLocalizationSample.resources.dll" DestinationFiles="$(AppBundleDir)/Contents/MonoBundle/fr/XMLocalizationSample.resources.dll" /> 
 
\t </Target> 
 
</Project>

Полный пример можно найти здесь: https://github.com/xamarin/mac-samples/tree/master/XMLocalizationSample