我们使用resx文件来本地化我们的Web应用程序。当只有一个页面使用某个短语时,我们通常创建本地resx文件(映射到特定页面);当多个页面需要短语时,我们通常创建全局resx文件。
但是关于全局resx文件的好处是它们是一个类,你可以像调用类的属性一样调用这些短语:
Resource.UI.iNotFound
所以我在想 - 为什么要使用本地resx文件?为什么不为整个应用程序使用一个全局resx文件,这样可以避免运行时错误调用不存在的短语?
我确信这是一个很好的答案,我只是不知道它是什么......
答案 0 :(得分:50)
我一直在寻找指南,并在MSDN中找到了这个:
在全局和本地资源文件之间进行选择
您可以使用全局的任意组合 Web中的本地资源文件 应用。一般来说,你添加 资源到全局资源文件 当你想分享资源时 页面之间。全球资源 资源文件也是强类型的 当您想要访问文件时 编程。
但是,全局资源文件可以 变得很大,如果你存储所有 其中的本地化资源。全球 资源文件也可以更多 难以管理,如果不止一个 开发人员正在开展不同的工 页面,但在一个资源文件中。
本地资源文件使其更容易 管理单个ASP.NET的资源 网页。但你无法分享 页面之间的资源。另外, 你可能会创造很多本地的 资源文件,如果你有很多页面 必须本地化为许多 语言。如果网站很大 许多文件夹和语言,本地 资源可以迅速扩大 中的组件数量 应用领域。
当您更改默认资源文件时, ASP.NET,本地或全局 重新编译资源并重新启动 ASP.NET应用程序。这个可以 影响你的整体表现 现场。如果添加卫星资源 文件,它不会导致 重新编译资源,但是 ASP.NET应用程序将重新启动。
所以看起来编程团队真的要权衡每种方法的优劣,并选择对他们有利的方法。
答案 1 :(得分:15)
Joe90 - 我不得不说,根据我的经验,我不能同意管理分散在整个项目中的大量本地资源文件比管理一个全局资源文件更容易。没有什么可以阻止一次又一次地重复相同的翻译,并且它们很难被追踪。访问全局资源文件非常容易在团队中进行协调,多个用户可以一目了然地看到他们所需的翻译是否已经完成。
我开始使用与Lea完全相同的策略 - 即从本地资源文件开始,然后将其移动到全局资源文件(如果它被多次引用)。这很快变成了管理的麻烦,我现在每次都转向使用全局资源文件。
微软似乎没有任何明确的指导方针,即最佳实践是什么,甚至是如何实施这两种方法,以便我们可以冒险猜测!
我猜测比较/支付是本地资源文件只需要重新编译它们所涉及的文件,而更改全局资源文件似乎需要重新编译整个网站 - 会话状态等固有丢失,因此需要在更新期间使网站脱机以确保安全。
答案 2 :(得分:7)
我在一个产品上有一个至少10个开发人员的开发团队,我们正在为每个站点使用一个全局resx。
合并这个大的resx文件的问题在我看来应该不是问题。
如果您有10位自己在网站上设置语言的开发人员,您如何获得统一的方式在网站上表达自己?开发人员往往倾向于擅长代码而不是语法表达。 (我自己是开发人员。)
语言专家应该编辑resx文件并为开发人员锁定它!
答案 3 :(得分:2)
全局资源文件是最好的翻译方法。关键是使用命名约定,例如字符串名称的前几个字母的页面名称缩写,以便您可以轻松地找到每个网页的资源。尝试在多个页面中重复使用多个短语会导致翻译人员更加困惑。
您可以根据需要定义可恢复的短语,例如Yes,No,BTN_OK,BTN_Cancel,QTN_AreYouSure等,使用缺少页面命名约定(前几个字母没有页面名称缩写)。您的大多数RESX行将特定于每个页面,您不应该专注于尝试尽可能多地重用。在需要时,可以在几分钟内使用文本查找/替换来仔细更改整个文件中的一个短语。