我是ASP .NET开发黑色艺术的初学者,如果这是一个愚蠢的问题,请原谅我。 经过一段谷歌搜索,并阅读(某些......)ASP .NET 3.5释放,我还没有找到一种方法来做我想要的 - 这通常要么意味着我想做一些愚蠢的事情,或者很明显,我错过了它。)
我正在创建一个服务器控件,用于我公司正在开发的多个站点。它没什么特别的,只是一个标准的 - 你可以编辑和创建用户控件。
这样做自然需要本地化一些文本。
对我来说,这样做的自然方式将是一个以某种惯例命名的全局资源,包含服务器控件的项目可能会填充本地化数据。
但是,我在组件中访问这些资源时遇到了一些麻烦。
在App_GlobalResources文件夹中的项目A中创建了一个名为CreateOrEditUserControl.da.resx的资源文件(旁注:我是否需要将我的App_GlobalResources文件夹添加到web-config或其他内容?)。项目A包括CreateOrEditUserControl,它来自项目B并通过程序集引用加载。 CreateOrEditUserControl.da.resx包含映射到字符串Brugernavn的关键UserName(这只是丹麦语本地化,您可能已经猜到了......)
在CreateChildControls()方法的控件内部(因为我需要本地化的字符串),我尝试通过以下方式访问资源:
HttpContext.GetGlobalResource("CreateOrEditUserControl","UserName");
HttpContext.GetGlobalResource("CreateOrEditUserControl.da","UserName");
HttpContext.GetGlobalResource("CreateOrEditUserControl.da.resx","UserName");
HttpContext.GetLocalResource("CreateOrEditUserControl.da.resx","UserName");
前三个返回null,最后一个抛出异常,因为我没有从我的组件中获得所述资源的权限,这似乎是合乎逻辑的。
到目前为止,我不得不求助于“hack”,您可以在其中指定查询字符串中的语言并手动插入字符串。然而,这是不合需要的,因为任何改变都需要改变组件,而不仅仅是用户......
这样做的正确方法是什么 - 如果有的话?
提前致谢!
答案 0 :(得分:0)
对我来说,这样做的自然方式将是一个以某种惯例命名的全局资源,包含服务器控件的项目可能会填充本地化数据。
我对ASP.Net几乎一无所知,但如果我有在不同页面或各种应用程序中使用的通用控件,我会在此控件内部包含可翻译资源。那么你不必为每个项目本地化它,只需要一次。我很确定这在ASP.Net中是可行的。
至于访问全局资源(再次抱歉我的知识有限),您可能必须使用ResourceManager或ResourceReader。