如何在Win Store App和WP8 App中使用相同的代码来加载字符串资源?

时间:2013-12-17 09:44:11

标签: c# windows-phone-8 localization windows-store-apps windows-store

我有一个Windows Phone 8应用程序,我现在移植到Windows应用商店。大多数WP8代码都可以在Windows应用商店应用中使用而无需任何更改。但是,使用Resource Strings时会出现问题。

在WP8项目中,字符串存储在.resx文件中,可以通过通用类AppResources在代码中使用:

String msg = AppResources.MyMessageStringID;

在WinStore项目中,字符串存储在.resw文件中,可以通过ResourceLoader在代码中使用:

public class StringLoader {
    private static ResourceLoader resourceLoader = new ResourceLoader();

    public static String Get(String stringName) {
        return resourceLoader.GetString(stringName);
    }
}

String msg = StringLoader.Get("MyMessageStringID");

我正在寻找一种方法来使用相同的代码来加载两个项目中的字符串。我的第一种方法是使用编译器开关:

String msg = #if NETFX_CORE StringLoader.Get("MyMessageStringID"); #else AppResources.MyMessageStringID; #endif

问题:编译器开关不能内联使用。它必须是这样的:

#if NETFX_CORE
    String msg = StringLoader.Get("MyMessageStringID"); 
#else 
    String msg = AppResources.MyMessageStringID; 
#endif

虽然这可以用于这个简单的例子,但它会在实际项目中创建大量冗余代码。

当然,我也可以为Win Store创建一个“AppResources”类:

public class AppResources{
    private static ResourceLoader resourceLoader = new ResourceLoader();

    public static String MyMessageStringID {
        get { return resourceLoader.GetString("MyMessageStringID "); }
    }
}

这样的类是在WP8中自动创建的(据我所知)我必须手动为Windows应用商店应用创建它。由于项目中有数百个字符串,因此非常非常有用。

在WP8和Windows应用商店中使用相同的代码进行本地化是否有任何简洁明了的解决方案?

1 个答案:

答案 0 :(得分:0)

这个问题正好解决了my article how to share resources between Windows Phone and Windows 8 app 简而言之,创建可移植类库,将资源放在那里并在两个应用程序中引用此项目,完成。