【问题标题】:How to implement .NET MAUI localization如何实现 .NET MAUI 本地化
【发布时间】:2022-07-13 17:07:14
【问题描述】:

我找不到任何有关为 MAUI 应用实施本地化的方向。我已经阅读了一些有关本地化 Xamarin 应用程序的信息,但即使经过广泛的网络搜索,也无法将其翻译成 MAUI。

谁能指出我可能错过的参考资料?

【问题讨论】:

标签: .net localization maui


【解决方案1】:

试试这个 - 创建标准资源

  • “添加新项目/资源文件”> MauiApp1/Resources
  • 设置名称“AppRes.resx”
  • 创建第二个语言“AppRes.ru.resx”
  • 添加字符串

如何在 XAML 中使用

[...] xmlns:res="clr-namespace:MauiApp1.Resources" 

<Button Text="{x:Static res:AppRes.Title}" />

使用代码

//get lang as "en"
string lang = Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName;

//toggle lang
if(lang == "ru")
{
    Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("ru-RU");
    Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ru-RU");
}
else
{
    Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
    Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
}

//get translated title
//using MauiApp1.Resources;
string title = AppRes.Title

对于更新只需重置应用程序

(App.Current as App).MainPage = new AppShell();

就是这样

【讨论】:

    【解决方案2】:

    查看 .NET 6“播客应用程序”的 .NET MAUI 参考应用程序,您可以在此处找到:https://github.com/microsoft/dotnet-podcasts

    它使用包含 UI 可本地化字符串的资源文件。

    也许对你有帮助。

    【讨论】:

    • 不是一个很好的例子。这只是英语......
    • 这是一个很好的例子来说明如何实现本地化。下一步是添加更多资源文件。
    • 这是一个解决方案的链接,而不是解决方案本身。
    【解决方案3】:

    使用Microsoft Extensions Localization

    为 LocalizeExtension 创建类。这里 AppStrings 是您提供的 ResourceFileName

    [ContentProperty(nameof(Key))]
    public class LocalizeExtension : IMarkupExtension
    {
        IStringLocalizer<AppStrings> _localizer;
    
        public string Key { get; set; } = string.Empty;
    
        public LocalizeExtension()
        {
            _localizer = ServiceHelper.GetService<IStringLocalizer<AppStrings>>();
        }
    
        public object ProvideValue(IServiceProvider serviceProvider)
        {
            string localizedText = _localizer[Key];
            return localizedText;
        }
    
        object IMarkupExtension.ProvideValue(IServiceProvider serviceProvider) => ProvideValue(serviceProvider);
    }
    

    查看此 SampleApp 了解更多详情LocalizationDemo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 2023-01-09
      • 2022-08-22
      • 2013-03-21
      • 2022-12-04
      • 2022-06-23
      • 2020-12-17
      相关资源
      最近更新 更多