1

我正在将 iOS 应用程序移植到 WP8。iOS 应用程序已本地化为 5 种不同的语言。本地化的字符串存储在不同的文件中。例如,“app.strings”保存应用程序唯一的所有字符串,“common.strings”保存在其他应用程序中使用的字符串。当然,每个 .strings 文件有 5 个版本(app.de.strings、app.en.strings ......)。

在 iOS 代码中,我可以简单地引用“String_ID_123”,系统将自动在所有 .strings 文件中搜索该字符串并显示正确的值,无论该字符串是否可以在 app.strings、common.strings 或其他地方找到. 这在WP8上也可以吗?

VS 自动创建了两个文件来支持本地化:

  • 保存实际字符串的AppResources.resx (使用AppRessources.Designer.cs作为后面的代码)
  • LocalizedStrings.cs是一个支持绑定的辅助类

当然,我可以将额外的 .resx 文件添加到项目中,并使用它们创建与 iOS 项目中相同的结构。但随后我将不得不添加引用正确 .resx 的其他版本的 LocalizedStrings.cs(例如 LocalizedStrings_Common.cs)。然后我必须在 XAML 中明确使用正确的源。

我必须知道 String_ID_123 的定义在哪里。有没有办法让 XAML/C# 自动执行此操作?

4

1 回答 1

1

恐怕VS不会帮你的。首先,您不能在不指定它所在的资源文件的情况下处理 String_ID_123。其次,当您添加其他资源文件(例如 CommonResources.resx)时,VS 不会为您修改 LocalizedStrings。你必须自己做。

   public class LocalizedStrings
    {
        private static AppResources _localizedResources = new AppResources();
        private static CommonResources _locallizedCommonResources = new CommonResources();

        public AppResources LocalizedResources { get { return _localizedResources; } }
        public CommonResources LocalizedCommonResources { get { return _locallizedCommonResources; } }

第三,当您向项目添加新语言时,VS 会为您生成 AppResources.fr.resx,但不会生成 CommonResources.fr.resx。您必须自己添加一个副本。

于 2013-10-31T08:21:56.430 回答