【问题标题】:Xamarin Forms Language issues on AndroidAndroid 上的 Xamarin Forms 语言问题
【发布时间】:2020-05-22 11:59:43
【问题描述】:

我要为一个邪恶的问题发疯好几个小时!!!

我在 Visual Studio for Mac 上创建了一个新的 Xamain Forms prj(最新版本和最新更新)。

我有三个对应语言的 AppResources 文件: - AppResources.resx(默认) - AppResources.it.resx(意大利语) - AppResources.es.resx(西班牙语)

在 IOS 模拟器上,一切正常。在 Android 上,我总是看到默认字符串。

这是我在 AppResources 文件中的简单数据:

AppResources.resx:
    <data name="test" xml:space="preserve">
        <value>Default</value>
    </data>

AppResources.es.resx:
        <data name="test" xml:space="preserve">
                <value>Espanol</value>
        </data>

AppResources.it.resx:
    <data name="test" xml:space="preserve">
            <value>Italiano</value>
    </data>

为什么在 IOS 上完美运行而在 Android 上我只能看到“默认”?!?

【问题讨论】:

  • 您是否遵循本指南以确保一切都已正确配置? docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/…。我最近在 VS Mac 中启动了一个包含 6 种语言的项目,它在 iOS 和 Android 中运行良好。您如何初始化和更新您正在使用的文化?
  • 嗯这可能是问题....!!! “你如何初始化和更新你正在使用的文化?”什么意思?
  • 但是代码在 ios 上运行没有任何问题...为什么在 android 上不行?
  • 在 Android 上,应用程序启动时会检测并缓存语言设置。如果您更改语言,您可能需要退出并重新启动应用程序才能看到已应用的更改。查看教程:docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/…
  • 不...应该更容易,因为我不想“实时”更改语言,我希望在开始时看到我的应用程序具有正确的语言资源!!!但仅适用于 IOS!

标签: xamarin xamarin.forms multilingual resx


【解决方案1】:

在上次 Visual Studio (MAC) 更新(版本 8.6(内部版本 4520))后,我开始遇到这个问题

看这个:

https://github.com/xamarin/xamarin-android/issues/4664#issuecomment-632986668

这个解决方法解决了我的问题。

【讨论】:

  • 如果对你有帮助别忘了采纳答案,这将帮助更多的人:)
【解决方案2】:

作为对您上述评论的回应,您可以拥有一个 LocalizationService,您将在其中设置和更新您当前的文化(CultureInfo 对象)。您也可以使用静态CultureInfo.InstalledUICulture 来获取设备文化。

    public CultureInfo CurrentCulture
    {
        get => cultureInfo;
        set
        {
            if(cultureInfo?.Equals(value) ?? false)
            {
                return;
            }
            cultureInfo = value;
            Thread.CurrentThread.CurrentCulture = value;
            Thread.CurrentThread.CurrentUICulture = value;
        }
    }

【讨论】:

  • 使用这个:Thread.CurrentThread.CurrentCulture = CultureInfo.InstalledUICulture; Thread.CurrentThread.CurrentUICulture = CultureInfo.InstalledUICulture;正如您所说,它使用“it-IT”,但结果没有改变......问题可能是由具有“it”的资源文件引起的,而文化信息是“it-IT”?
  • 你不应该有这个问题。有关更多信息,请查看此csharp.net-tutorials.com/working-with-culture-and-regions/…。 CurrentCulture 属性应该分配给您的用户可能选择的文化或您明确想要强制的文化。我建议保留您支持的文化(英语、意大利语、西班牙语)的集合,并根据您的应用程序逻辑将它们分配给您的 CultureInfo 对象。
  • 不相信我...相同的代码相同的配置:在 ios 上可以在 android 上运行它不!
  • 可能是 iOS 设备和 Android 中返回的文化不同的问题?作为一种解决方法,您可以从设备文化中获取 TwoLetterISOLanguageName 并使用它来比较 CultureInfo 对象并将其分配给 CurrentCulture
  • 我试过这个:Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(CultureInfo.InstalledUICulture.TwoLetterISOLanguageName); Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(CultureInfo.InstalledUICulture.TwoLetterISOLanguageName);但是失败了...我很紧张...:/
猜你喜欢
  • 2017-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-26
  • 1970-01-01
相关资源
最近更新 更多