App Hub在7月18日进行了更新。有些用户反馈新增的默认语言选项有点令人费解。本文简单做个介绍,帮助开发者正确设置语言,加速WP应用提交快速。这次的系统更新后,App Hub可以检测到XAP包中的语言设置。使用这个功能,需要开发者更新以前提交的XAP包,重新提交。
 

语言检测
        AppHub现在能够检测到XAP包里的默认语言设置和资源文件里的本地语言设置。这是通过检测XAP包的[NeutralResourcesLanguage]属性做到的。在App Hub的7月18日的更新中,开发者需要指定这一属性。详细操作方式,建议参考MSDN中的“ 怎样创建本地化WindowsPhone应用”章节。该章节详细描述了如何通过添加资源文件实现应用程序的本地化。
         [NeutralResourcesLanguage]属性位于应用程序的Properties\AssemblyInfo.cs文件中,格式如下所示:
[assembly: NeutralResourcesLanguageAttribute("en")]
        属性中的参数部分指定了默认的语言名称。属性的设置非常容易,在Visual Studio中依次单击 Properties -> Assembly Information,然后从下拉列表中选择你想要设定的语言即可。
        添加多语言支持,通常涉及到相关目录下的*.resource.dll。
        典型的应用往往包含下列的资源文件,可以对比你的XAP:
  • en-us/MyApp.resources.dll
  • en-GB/MyApp.resources.dll
  • en-AU/MyApp.resources.dll
  • de/MyApp.resources.dll
  • fr/MyApp.resources.dll
 
以及[NeutralResourcesLanguage(“es”).
 
        据此不难判断AppHub能够支持的应用语言包括US English, British English, Australian English, German and French and Spanish。用户可以用下面的语言描述自己的应用:
  • 支持English ——应用有“en-us”相关资源
  • 支持English (International) ——应用有“en-GB” 或“en-AU” cultures相关资源
  • 支持German——应用有“de”相关资源
  • 支持French——应用有“fr”相关资源
  • 支持Spanish——应用有“es”相关资源
        或许你会问“English (International)是什么意思?它与English有什么不同?”。下面内容将为你解答这些疑问。
 
本地化数据分组
        有一些语言,在世界各地有是有细微差别。例如English就分为US English, UK English, Canada English, Australia English等。这使得描述应用支持的语言时非常麻烦。为了解决这一问题,App Hub使用一种叫做本地化语言分组的方式(LocGroups)来处理同一语言的不同分支。现在开发者只需要说明本地化语言分组,那么当应用被发布到分组所在的地区时,应用描述数据将会在这些分组间共享。
        几乎所有的本地化语言分组都只有唯一一种语言。唯一的例外是英语,分为English(North America)和English(International)。前者指美国和加拿大应用,后者指其他地区的应用。当提交应用的时候可以查看“tell us about your app”页面的左侧部分,一边区分两个版本应用的详细描述。
        为了避免这个问题,只需避免同时使用这两个不同版本的English。
 
常见问题
        7月18日的更新,引起了一些开发者对于设置默认语言感到困惑,尤其是在提交更新的时候。设置错误的默认语言会引起很多问题,常见的问题有:
 
Error 2003:[NeutralResourcesLanguage]属性无法读取。
        这表名你需要为你的XAP包设置一个[NeutralResourcesLanguage]属性,然后重新编译并提交。具体操作方法在上面的段落中已有提及。
 
Error 1047:新版XAP包比已经提交的XAP包支持的语言少。
 
Error 1048:新提交的XAP包中支持的语言与已经提交的XAP包中支持的语言有冲突。
        这通常是由于在发布更新时选择了错误的语言而引起的。语言的更新需要与之前的语言相匹配。如果之前的语言被设置成“English(International)”,那么你需要使用[NeutralResourcesLanguage(“es”)。如果是“English”,就用[NeutralResourcesLanguage(“en-US”)或[NeutralResourcesLanguage(“en-CA”).
       
 
        有时你会遇到一个已知的系统问题:系统提醒你输入数据,但是系统没有提供输入数据的空间。这个问题正在解决众。一个 临时解决方法是,删掉正在提交的应用,并重新提交。注意,确保你删掉的是正在提交的应用,而不是已经发布的应用。