【问题标题】:Bind Strings from an .resw file with ReswFileCodeGenerator in XAML使用 XAML 中的 ReswFileCodeGenerator 绑定 .resw 文件中的字符串
【发布时间】:2015-01-01 21:47:24
【问题描述】:

我尝试使用多语言应用工具包本地化我的 Windows 通用应用。 因为不能直接从 XAML 中的 .resw 文件绑定字符串,所以我使用了 ReswFileCodeGenerator 工具。它在后面的代码中运行良好,但在 XAML 中我无法做到这一点。

在 Windows Phone 8.0 中我可以使用:

Text="{Binding Path=LocalizedResources.StringName, Source={StaticResource Strings}}"

在 Windows (Phone) 8.1 中是否有类似的方法使用 ReswFileGenerator 工具?

【问题讨论】:

    标签: c# xaml localization windows-runtime windows-phone-8.1


    【解决方案1】:

    我仍然建议您按照 Depechie 的建议进行操作:使用 x:Uid 属性。

    如果您需要从代码中获取本地化字符串,只需将资源名称中的. 替换为/。因此,在 XAML 中,您将编写:

    <TextBlock x:Uid="appString" />
    

    在您将使用的代码中:

    var resourceLoader = new ResourceLoader();
    var localizedText = resourceLoader.GetString("appString/Text");
    

    【讨论】:

      【解决方案2】:

      在 wp8.1 中使用 .resw 文件进行资源翻译时,您需要在 xaml 控件上使用 x:Uid 属性!

      点赞&lt;TextBlock x:Uid="FieldKey" /&gt;

      Details are mentioned here...

      【讨论】:

      • 我以前用 x:Uid 做过,但是很不方便,因为对于 XAML,我总是需要在我的 .resw 文件中写入“appString.Text”。不能在后面的代码中使用(我只需要“appString”)。
      • @Cristian126 appString.Text 也可以在后面的代码中使用。看看我的回答。
      • 微软做法的问题是强制资源文件适应xaml使用。大多数语言资源在 WP、iOS 和 Android 的项目之间共享。当前在开发人员身上强制使用新的键命名约定的方法,如“FieldKey.Text”,对于这种重用目的没有帮助。
      【解决方案3】:

      我已经编写了一些代码来帮助我解决这个问题。它可能并不完美,但对我来说非常有用。这是link to the helper。您构建它并将 .exe 文件放在某个易于访问的文件夹中。

      在包含资源的项目中,您将预构建操作设置为类似这样(您只需更改 "path\to\ResourcesHelper.exe" 部分):

      call "path\to\ResourcesHelper.exe" "$(TargetName)" "$(ProjectDir)\" "$(RootNameSpace)" "universal"
      

      此外,主要资源必须位于项目的 Resources/en-US 文件夹中(不过,您可以在代码中更改它)。

      这样,当您构建项目时,它将生成一个名为 LocalizedStrings.cs 的文件,该文件类似于为 .resx 文件生成的文件。它包含一些额外的属性,称为 LC(小写字母)、UC(大写字母)和 UCF(大写字母优先),它们返回该大小写中的字符串。我希望你会发现它有用。 :)

      注意:该工具不适用于其他人,所以我只是编写了我需要的代码,因此它可能无法完美运行。

      【讨论】:

      • 感谢您的回答,我已将预构建操作和 .resw 文件添加到 Resources/en-US 文件夹。但是我现在在哪里可以找到 LocalizedStrings.cs 文件?我应该从 .resw 文件修改自定义构建工具吗?
      • @Cristian126 使用预构建操作构建项目后,将在项目的主文件夹(位于 Resources 文件夹上方)中创建文件。不过,您必须手动将其包含到项目中。使用“显示所有文件”按钮,然后包含该文件。它在文件夹中,而不是在项目本身中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      相关资源
      最近更新 更多