如何强制本地化文化在 Xamarin 中的整个应用程序中使用 en-US

Ste*_*ald 16 c# xamarin.ios xamarin.android xamarin

无论用户设置如何,如何强制Xamain - Android / iOS美国英语文化中工作。我在应用程序中面临的问题是,该应用程序仅支持美国/英国英语,但如果用户将语言偏好更改为西班牙语、德语等。数字日期等格式将发生变化。

例如, 2.35将在西班牙语、德语中表示为2,35

因此,如果用户尝试使用具有相似语言的应用程序,该应用程序将错过行为或崩溃。在我尝试Convert.ToDouble("2,35");或类似的情况下会发生崩溃。

所以我的怀疑是,

在 Xamarin 中是否可以将文化强制设置为 en-US。可能在一个地方,否则我需要在我执行转换的所有地方更改它。

请帮忙。

7vi*_*am7 13

我正在使用一个Xamarin Forms应用程序。

App课堂上设置文化对我来说很有用。

using System.Globalization;
using System.Threading;


private void SetCultureToUSEnglish()
{
    CultureInfo englishUSCulture = new CultureInfo("en-US");
    CultureInfo.DefaultThreadCurrentCulture = englishUSCulture;
}
Run Code Online (Sandbox Code Playgroud)


Joe*_*ehl 5

您可以使用以下属性设置默认区域性:

CultureInfo.DefaultThreadCurrentCulture
Run Code Online (Sandbox Code Playgroud)

但这在 Android 中不起作用。因此,对于 Android,您需要在每次恢复活动时设置区域性。您可以添加基本活动,例如:

internal class MyBaseActivity : Activity
{
    protected override void OnResume ()
    {
        base.OnResume ();

        // Here you would read it from where ever.
        var userSelectedCulture = new CultureInfo ("fr-FR");

        Thread.CurrentThread.CurrentCulture = userSelectedCulture;
    }
}
Run Code Online (Sandbox Code Playgroud)

在xamarin论坛中找到:https://forums.xamarin.com/discussion/9764/how-to-set-a-global-cultureinfo-for-an-app


fol*_*uis 5

我尝试了乔尔的方法,但它对我不起作用。我用了这个方法

        string cultureName = "es-US";
        var locale = new Java.Util.Locale(cultureName);
        Java.Util.Locale.Default = locale;

        var config = new Android.Content.Res.Configuration { Locale = locale };
        BaseContext.Resources.UpdateConfiguration(config, BaseContext.Resources.DisplayMetrics);
Run Code Online (Sandbox Code Playgroud)

还创建了一个基础活动

在这里寻找答案:

使用 xamarin 和 c# 更改 android 上的cultureinfo


小智 3

您必须在应用程序中设置当前文化。本地化效果非常好。我就是这样做的:

public void SetLocale(CultureInfo ci)
    {
        Thread.CurrentThread.CurrentCulture = ci;
        Thread.CurrentThread.CurrentUICulture = ci;

    }
Run Code Online (Sandbox Code Playgroud)

在这里你可以从设备中获取文化:

public CultureInfo GetCurrentCultureInfo()
    {
        var netLanguage = "en";
        if (NSLocale.PreferredLanguages.Length > 0)
        {
            var pref = NSLocale.PreferredLanguages[0];

            netLanguage = iOSToDotnetLanguage(pref);
        }

        // this gets called a lot - try/catch can be expensive so consider caching or something
        CultureInfo ci = null;
        try
        {
            ci = new CultureInfo(netLanguage);
        }
        catch (CultureNotFoundException e1)
        {
        }
     }
private string iOSToDotnetLanguage(string iOSLanguage)
    {
     // Testing special cases..
    }
Run Code Online (Sandbox Code Playgroud)

如果您使用 PCL 项目,请使用抽象。使用PCL中的接口及其在本机项目中的实现。

您可以在此处查看更多信息: https ://learn.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/localization