2012-09-25 21 views
0

有許多RESX標記擴展示例(以及諸如Globalizer的產品)提供XAML標記擴展,以允許您動態引用RESX文件中的資源以啓用本地化。有人看過所有這些從糠pick中挑出麥子嗎?也就是說,任何人對XAML的RESX標記擴展都有建議?有關XAML RESX標記擴展的建議

這裏有一些可用的選項:

+0

您還可以使用XAML資源實現本地化 –

回答

1

你做不需要任何標記擴展來實現這一點。你可以用一個簡單的ValueConverter來完成。

  1. .resx文件添加到您的項目(在這個例子中,我們將其稱之爲Resource1.resx,有一個名爲「字符串1」值的字符串值「世界,你好!」)

  2. 創建一個轉換器,會將字符串轉換爲本地化的字符串。

    namespace WpfApplication1.Converters 
    { 
        public class ResxLocalizationConverter : IValueConverter 
        { 
         public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
         { 
          string result = Resource1.ResourceManager.GetString(value.ToString()); 
          if (result == null) 
          { 
           result = value.ToString(); 
          } 
          return result; 
         } 
    
         public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
         { 
          throw new NotImplementedException(); 
         } 
        } 
    } 
    
  3. 添加一個轉換器實例的App.xaml

    <Application x:Class="WpfApplication1.App" 
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
          StartupUri="Window1.xaml" 
          xmlns:converters="clr-namespace:WpfApplication1.Converters"> 
        <Application.Resources> 
         <converters:ResxLocalizationConverter x:Key="ResxLocalizationConverter" /> 
        </Application.Resources> 
    </Application> 
    
  4. 把非本地化字符串值(或鑰匙)在您的XAML。

    <Window x:Class="WpfApplication1.Window1" 
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
         Title="Window1" Height="300" Width="300"> 
        <Grid>   
         <TextBlock Text="{Binding Source='String1', Converter={StaticResource ResxLocalizationConverter}}"/> 
        </Grid> 
    </Window> 
    

這將顯示 「世界,你好!」在TextBlock中。例如,您只需將Resource1.fr-FR.resx添加到Visual Studio項目(帶有名爲「String1」值的字符串值「Salut tout le monde!」)即可。例如,要爲法語本地化,您需要添加Resource1.fr-FR.resx。這將在法語本地化的PC上顯示法語版本,或者您可以使用ResourceManager.GetString(...)重載,以便您明確地選擇語言。

+0

有趣的方法。它是否也支持對CurrentUICulture的運行時更改? –