当你面临需要解决的问题时(实际上,现在谁不是呢?),我们计算机人通常采用的基本策略被称为“分而治之”。它的步骤如下:
1. 将特定问题概念化为一组较小的子问题。
2. 解决每个较小的问题。
3. 将结果组合成特定问题的解决方案。
但是,“分而治之”并不是唯一可能的策略。我们也可以采取更加普遍的方法:
1. 将特定问题概念化为更一般问题的特殊情况。
2. 解决更一般的问题。
3. 将更一般问题的解决方案适应到特定问题中。
- Eric Lippert
我相信像ASP.Net/C#这样的服务器端语言已经存在许多解决方案来解决这个问题。
我已经概述了问题的一些主要方面:
- 问题:我们需要仅为所需语言加载数据。
- 解决方案:为此,我们将数据保存到每种语言的单独文件中。
例:res.de.js、res.fr.js、res.en.js、res.js(默认语言)
问题:每个页面的资源文件应该分开,这样我们只获取需要的数据
解决方案:我们可以使用一些已经存在的工具,比如https://github.com/rgrove/lazyload
问题:我们需要一个键值对结构来保存我们的数据
解决方案:我建议使用JavaScript对象代替字符串/字符串air。
我们可以从IDE的智能感知中受益
问题:通用成员应该存储在公共文件中,所有页面都应该访问它们
解决方案:为此,我在Web应用程序的根目录下创建了一个名为Global_Resources的文件夹,以及一个用于存储每个子文件夹全局文件的文件夹,我们将其命名为“Local_Resources”
问题:每个子系统/子文件夹/模块成员应该覆盖其范围内的Global_Resources成员
解决方案:我考虑了每个文件
应用程序结构
root/
Global_Resources/
default.js
default.fr.js
UserManagementSystem/
Local_Resources/
default.js
default.fr.js
createUser.js
Login.htm
CreateUser.htm
文件的相应代码:
Global_Resources/default.js
var res = {
Create : "Create",
Update : "Save Changes",
Delete : "Delete"
};
Global_Resources/default.fr.js
var res = {
Create : "créer",
Update : "Enregistrer les modifications",
Delete : "effacer"
};
从Global_Resource选择的页面上应该加载所需语言的资源文件 - 这应该是所有页面上首先加载的文件。
UserManagementSystem/Local_Resources/default.js
res.Name = "Name"
res.UserName = "UserName"
res.Password = "Password"
UserManagementSystem/Local_Resources/default.fr.js
res.Name = "nom";
res.UserName = "Nom d'utilisateur";
res.Password = "Mot de passe";
UserManagementSystem/Local_Resources/createUser.js
// Override res.Create on Global_Resources/default.js
res.Create = "Create User"
UserManagementSystem/Local_Resources/createUser.fr.js
// Override Global_Resources/default.fr.js
res.Create = "Créer un utilisateur"
manager.js文件(此文件应在最后加载)
res.lang = "fr";
var globalResourcePath = "Global_Resources";
var resourceFiles = [];
var currentFile = globalResourcePath + "\\default" + res.lang + ".js" ;
if(!IsFileExist(currentFile))
currentFile = globalResourcePath + "\\default.js" ;
if(!IsFileExist(currentFile)) throw new Exception("File Not Found");
resourceFiles.push(currentFile);
// Push parent folder on folder into folder
foreach(var folder in parent folder of current page)
{
currentFile = folder + "\\Local_Resource\\default." + res.lang + ".js";
if(!IsExist(currentFile))
currentFile = folder + "\\Local_Resource\\default.js";
if(!IsExist(currentFile)) throw new Exception("File Not Found");
resourceFiles.push(currentFile);
}
for(int i = 0; i < resourceFiles.length; i++) { Load.js(resourceFiles[i]); }
// Get current page name
var pageNameWithoutExtension = "SomePage";
currentFile = currentPageFolderPath + pageNameWithoutExtension + res.lang + ".js" ;
if(!IsExist(currentFile))
currentFile = currentPageFolderPath + pageNameWithoutExtension + ".js" ;
if(!IsExist(currentFile)) throw new Exception("File Not Found");
希望它能有所帮助 :)