本地化UWP应用程序

时间:2016-06-29 13:49:37

标签: uwp windows-10-universal uwp-xaml

我正在将应用程序从Windows Phone 8.1移植到UWP,我遇到从资源获取字符串的问题。在WP 8.1中,我可以写一下字符串:

Text="{Binding Path=LocalizedResources.lDownloadStatus , Source={StaticResource LocalizedStrings}}"

UWP中是否有类似的解决方案或者我必须设置x:UID,然后在资源文件集中设置例如:“Button.Content | SampleContent”?

3 个答案:

答案 0 :(得分:2)

你应该在你的项目中创建文件夹“Strings”,因为法语在其中创建另一个具有国家LCID名称的文件夹(法国的fr-fr)。并在那里创建resource.resw文件。

如果要在TextBlock.Text中使用值,请将.resw文件中的字段命名为“Hello.Text”,并为其指定值“Bonjour”。

转到TextBlock并设置x:Uid =“Hello”。

使用ApplicationLanguages.PrimaryLanguageOverride =“fr-fr”更改您的语言。

答案 1 :(得分:0)

使用x:uid加载资源字符串,或者使用ResourceManager从后端获取资源字符串。 以下是MSDN的示例:How to create a localization UWP App

希望它有所帮助!

答案 2 :(得分:0)

我已经使用CustomResources获得了非常好的经验。

只需在UI项目中的任何位置创建一个新类,该类继承自CustomXamlResourceLoader并实现以下方法:

protected override object GetResource(string resourceId, string objectType, string propertyName, string propertyType)
    {
        var parts = resourceId.Split('|');

        if (parts.Length != 2)
            throw new ArgumentException();

        return ResourceLoader.GetForViewIndependentUse(parts[0]).GetString(split[1]);
    }

然后你创建资源文件,我曾经把它命名为我所在的页面,即" MainPage.resw"。

就是这样,现在您可以开始使用XAML中的资源了:

Text="{CustomResource MainPage|MyResourceKey}"

当然,分离器可以是你想要的任何东西,它不仅限于管道。只需确保在ResourceLoader和XAML中使用相同的分隔符。

您无法在Designer中获得预览,但最大的好处是您可以拆分资源文件,而不必将所有内容合并为一个。

有关详细信息,请参阅https://msdn.microsoft.com/en-us/windows/uwp/xaml-platform/customresource-markup-extension