我曾經做過類似的事情,我們在Android字符串資源文件中添加了任何新字符串,然後使用自定義構建工具將這些字符串轉換爲iOS和Windows格式。
版本的Android字符串可能是這樣的:
<string name="Hello">Hello, World!</string>
我們的工具將其轉換成一個Windows字符串資源:
<data name="Hello">
<value>Hello, World!</value>
</data>
接下來,添加一個轉換器,無助於提供值 ,而是假定其參數是參數是資源ID:
public sealed class LocalizeConverter : IValueConverter
{
private static readonly ResourceLoader Loader = ResourceLoader.GetForViewIndependentUse("/Resources");
public object Convert(object value, Type targetType, object parameter, string language)
{
string resourceId = parameter as string;
return !string.IsNullOrEmpty(resourceId) ? Loader.GetString(resourceId) : DependencyProperty.UnsetValue;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotSupportedException();
}
}
現在使可用的轉換器到你的XAML,或許是這樣的:
<Page.Resources>
<local:LocalizeConverter x:Key="LocalizeConverter" />
</Page.Resources>
最後,設置你的Button
的Content
屬性,如下所示:
<Button
Content="{x:Bind Converter={StaticResource LocalizeConverter}, ConverterParameter=Hello, Mode=OneTime}"
/>
請注意,我們不這樣做向轉換器提供任何值。 (在WPF中我會創建一個標記擴展,不幸的是,這個選項在UWP中是不可用的,所以我想出了這個無價值的轉換器選項作爲替代方案。)
如果你想要獲得更好的版本,考慮這個:
<Button
Content="{x:Bind Language, Converter={StaticResource LocalizeConverter}, ConverterParameter=Hello, Mode=OneWay}"
/>
這讓你可以隨時改變語言,如果你有資源本地化爲其他語言。 (注意:Mode=OneWay
而不是Mode=OneTime
)