2016-12-08 166 views
1

我想在我的Xamarin應用程序中開發多語言支持。 我使用了2個Resx文件,這些文件在英語和瑞典語中具有鍵值,併爲共同的appconfig類中的所選語言創建了一個全局變量。Xamarin.Forms應用程序支持多語言

我根據從appconfig選擇的語言創建的類TranslateExtension這對於文本轉換繼承Imarkupextension

[ContentProperty("Text")] 
public class TranslateExtension : IMarkupExtension 
    { 
    public string Text { get; set; } 

    public object ProvideValue(IServiceProvider serviceProvider) 
    { 
     if (Text == null) 
      return null; 


     ResourceManager rt1 = new ResourceManager(typeof(Resources.AppResources)); 
     if (AppConfig.SelectedLanguage == "Swedish") 
     { 
      rt1 = new ResourceManager(typeof(Resources.AppResources_sd)); 
     } 

     var translation = rt1.GetString(Text); 
     return translation; 


    } 
} 

現在我在XAML頁面

<StackLayout> 
<Picker x:Name="pickerForLanguage" BackgroundColor="White" HeightRequest="40" Title="Select Language" SelectedIndexChanged="SellectedLanguage"> 
    <Picker.Items> 
    <x:String>English</x:String> 
    <x:String>Swedish</x:String> 
    </Picker.Items> 
</Picker> 
<Label Text="{resources:TranslateExtension Greeting}" /> 

Home.xaml.cs

public void SellectedLanguage(object sender, EventArgs e) 
    { 
     if (pickerForLanguage.SelectedIndex == -1) 
     { 
      AppConfig.SelectedLanguage = "English"; 
     } 
     else 
     { 
      AppConfig.SelectedLanguage = "Swedish"; 
     } 

    } 

文本會從轉換到所選擇的語言結合這樣的文本值appconfig第一次加載頁面時。當我從下拉菜單中更改語言時,它將僅在appconfig中更改所選語言的值。它不會調用TranslateExtension值,並且在第一次後不會更改。

回答

0

的問題是,你永遠不會加載英語翻譯:

ResourceManager rt1 = new ResourceManager(typeof(Resources.AppResources_sd)); 
if (AppConfig.SelectedLanguage == "Swedish") 
{ 
    rt1 = new ResourceManager(typeof(Resources.AppResources_sd)); 
} 

對於這兩種ResourceManager - 構造函數設置了AppResources_sd資源。將此代碼的第一行更改爲使用英文資源文件(類似AppResources_en,我認爲)。

而減少一些開銷,如下圖所示我會加載:

ResourceManager rt1; 
if (AppConfig.SelectedLanguage == "Swedish") 
{ 
    rt1 = new ResourceManager(typeof(Resources.AppResources_sd)); 
} 
else 
{ 
    rt1 = new ResourceManager(typeof(Resources.AppResources_en)); 
} 

否則你加載瑞典資源每次,altough用戶選擇的是英語。

+0

oh.thats不是問題。我只是改變了測試..我忘了撤消它。其他我已經設置了英語默認和選定的索引m chnging它sweden.still它不工作 –

+0

問題是,代碼只會在頁面加載時執行一次,之後在下拉選擇調試器將不會去那裏。因此它不會改變。這顯而易見..但它的解決方案明白了嗎? –