2016-10-21 6 views
4

내가 스레드의 현재 문화를 변경Xamarin.mac 자원 현지화는 현재 문화

내부 AppDelegate에 xamarin.mac 현지화에 대한 .resx 파일을 사용하려고에 의해 변경되지 않습니다

enter image description here

그러나 문자열이 항상 기본 리소스 파일에서 표시됩니다 : 또한 나는 내 응용 프로그램 내부에 두 개의 리소스 파일이 있습니다. .. 어떤 해결책?

내가 네이티브 언어 변경을 사용, 여기에 전체 AppDelegate에 생성자입니다 :

BTW
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(); 

     } 

, 자 마린 스튜디오 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

감사합니다 ..하지만 나를 위해 작동하지 않습니다 :( \t \t \t NSUserDefaults.StandardUserDefaults.SetValueForKey (NSArray.FromObjects (LANG), (Foundation.NSString; 문자열 [] LANG = { "루", "EN"} : 여기에 내가 네이티브 언어 변경을 사용하여 한 번 더 작업입니다) "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>

전체 샘플을 여기에서 찾을 수 있습니다 : 응답 @Gusman에 대한 https://github.com/xamarin/mac-samples/tree/master/XMLocalizationSample