Culture
程序集包含有 culture 信息,并作为其标示的一部分,程序集能被限定为某一特定的 culture (German, US English 等等),Culture 使用一个字符串(RFC 1766)来标示。
通常一个仅包含源代码的程序集,并不包含特定的 culture 信息,所以也就不需要特别指定,这样的程序集是中性 culture (culture neutral)的。
当设计一个特定culture的程序集时,Microsoft 建议把你的代码和缺省culture的资源打包成一个程序集,这个程序集不要指定 culture(culture neutral)。然后建立其他的程序集,这些程序集只包含特定 culture 的资源并明确指定其culture(这些程序集的术名称为: satellite assemblies)。此时记得一个culture 一个 satellite assembly。
通常使用 AL.exe 来建立 satellite assembly,不用编译器是因为这些程序集中没有代码。使用 AL.exe 时使用 /c[ulture]:text 开关,参数就是culture字符串,例如: “en-US”。
配布 satellite assembly 的时候你应当把它放在子目录中,并且目录名要和culture字符串一致,例如你的程序目录为 C:\MyApp,那么“en-US” 的 satellite assembly 就应当放在 C:\MyApp\en-US 子目录中,运行时你可以通过使用System.Resources.ResourceManager类来访问这些 satellite assembly 中的资源。
提示:生成包含代码的 satellite assembly 也是能做到的(虽然没什么大的意义),要这么做你得使用 System.Reflection.AssemblyCultureAttribute 来指定 culture (不能使用 AL.exe 的 /culture 开关)。代码如下:
// Set assembly's culture to Swiss German
[assembly:AssemblyCulture("de-CH")]
最后请记得不要参照这些 satellite assembly,你只应当参照中性culture(culture-neutral) 的程序集。特殊情况下当你需要访问这些 satellite assembly 中的成员时,应当考虑使用“反射”。