Xamarin.mac Localization of resources does not change in the current culture

I am trying to use .resx files for localization in xamarin.mac

Inside AppDelegate I changed the current thread culture:

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

I also have two resource files inside my application:

enter image description here

But lines are always displayed from the default resource file ... Any solution?

I also use a change in the native language, here is the full AppDelegate constructor:

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 studio 6.1.1 (build 15) does not allow me to add a .resx resource if I have a resource in my project, a curious mistake!

I created the resource-ru.resx file and renamed it.

+4
source share
2 answers

, - (, 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();
+1

,

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

, msbuild. (- ):

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

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

: https://github.com/xamarin/mac-samples/tree/master/XMLocalizationSample

0

Source: https://habr.com/ru/post/1658480/


All Articles