当开发在MOSS多语言站点中使用的控件时,我们需要为各个不同的语言分别建立resource文件,比如这个站点支持英文跟中文, 那么我们建立2个resource文件:
myproject.en-US.resx (内容: greeting="你好")
myproject.zh-CN.resx (内容: greeting="hello")
命名规则是:<项目名>.<CultureName>.resx
CulturName有两部分组成: <language2>-<Country/region2>,具体可以参考msdn中
CultureInfo Class at:http://msdn2.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx
这两个resx文件我们要放到MOSS站点的目录里:C:\Inetpub\wwwroot\wss\VirtualDirectories\<YOUR_PORT>\App_GlobalResources
现在,我们可以用代码来访问这两个resource文件了。
CultureInfo ci = Thread.CurrentThread.CurrentCulture;
string greeting = rm.GetString("greeting", ci);
根据当前的实际culture,来读取相应的值。如果当前culture是中文那么返回“你好”,如果当前culture是英文则返回“hello”。
这种方法的前提是我们的resource文件保存在App_GlobalResources目录中。好处是以后随时可以改resource文件而不需要重新编译代码。
PS:我们也可以把resource文件打包成Satelite Assembly DLL,并以如下方式访问:
ResourceManager rm = new ResourceManager("<DLL_PROJECT_NAMESPACE>.myproject", Assembly.Load("<DLL_ASSEMBLY_NAME>"));
显然这种方式如果改变resource文件,则必须重新编译该DLL。