【问题标题】:Access to string.xml Xamarin.Forms访问 string.xml Xamarin.Forms
【发布时间】:2021-07-08 11:14:25
【问题描述】:

我需要访问 Resources 文件夹中的 string.xml 来制作我的多语言应用程序。

我正在尝试找到一种方法来做到这一点。它应该很简单,但我没有找到并回答。这是我的string.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<resources xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <string name="Text">Text</string>
</resources>

我需要将属性文本设置为我的按钮。我试试这个,但它不起作用。

<Button x:Name="btn" Text="@string/Text"/>

我还需要通过可编程性设置属性。像这样的事情:

btn.Text=Resources.GetString(Resource.String.Text);

我该怎么做?

谢谢。

【问题讨论】:

  • 为什么需要使用string.xml 来本地化您的应用程序?如果我没记错,string.xml 仅在 Android 上可用,并且鉴于您使用的是 Xamarin.Forms,我假设您也将针对 iOS。那么你会为iOS创建一个单独的资源文件吗?我不认为这是你应该本地化你的应用程序的方式。我的建议是忘记string.xml 并将您的本地化字符串存储在.resx 文件中。签出:docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/…

标签: c# android xamarin xamarin.forms


【解决方案1】:

没有必要在 xamarin.forms 中使用这样的资源文件。查看这篇文章,这将对您有所帮助:

  1. https://xamgirl.com/handle-multilingual-in-xamarin-forms-without-any-plugin/
  2. https://www.c-sharpcorner.com/article/xamarin-forms-multiligual/

你所做的,我们通常在 Xamarin.Android 项目中而不是在 Xamarin.Forms 中。

【讨论】:

    【解决方案2】:

    你的 string.xml 文件

    <resources>
        <string name="app_name">My Application</string>
        <string name="Text">Text</string>
    </resources>
    

    然后您可以在 XML 文件中添加一个按钮,例如-

    <Button
            android:id="@+id/btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/Text" />
    

    【讨论】:

    • Op 没有询问如何在 Android 上执行此操作。他们想知道如何使用 Xamarin.Forms 中的资源。
    【解决方案3】:

    如果您想在 Android 上使用 Strings.xml 执行此操作,请从 MainActivity 获取文本值并将该文本作为参数传递给 MainPage。

    为不同的语言创建不同的 Strings.xml 文件。

    默认值:values/Strings.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <resources>
     <string name="app_name">Default</string>
     <string name="taskcancel">Cancel</string>
    </resources>
    

    西班牙语:values-es/Strings.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <resources>
     <string name="app_name">Spanish</string>
     <string name="taskcancel">Cancelar</string>
    </resources>
    

    主活动:

     public string STR { get; set; }
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
    
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            STR = Resources.GetText(Resource.String.taskcancel);
            LoadApplication(new App(STR));
        }
    

    App.xaml.cs:

       public App(string text)
        {
            InitializeComponent();
    
            MainPage = new MainPage(text);
        }
    

    主页:

        public MainPage(string text)
        {
            InitializeComponent();
            label.Text = text; 
        }
    

    【讨论】:

      猜你喜欢
      • 2011-11-05
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 2019-03-20
      • 2011-08-29
      • 1970-01-01
      相关资源
      最近更新 更多