Cuando se enfrenta a un problema por resolver (y, francamente, ¿quién no lo es en estos días?), La estrategia básica que usualmente usamos los informáticos se llama "divide y vencerás". Dice así:
- Conceptualice el problema específico como un conjunto de subproblemas más pequeños.
- Resuelve cada problema más pequeño.
- Combine los resultados en una solución del problema específico.
Pero "divide y vencerás" no es la única estrategia posible. También podemos adoptar un enfoque más generalista:
- Conceptualice el problema específico como un caso especial de un problema más general.
- De alguna manera resuelve el problema general.
- Adapte la solución del problema general al problema específico.
- Eric Lippert
Creo que ya existen muchas soluciones para este problema en lenguajes del lado del servidor como ASP.Net/C#.
He esbozado algunos de los principales aspectos del problema.
Problema : necesitamos cargar datos solo para el idioma deseado
Solución : para este fin, guardamos los datos en archivos separados para cada idioma
ex. res.de.js, res.fr.js, res.en.js, res.js (para el idioma predeterminado)
Problema: los archivos de recursos para cada página deben estar separados para que solo obtengamos los datos que necesitamos
Solución : Podemos usar algunas herramientas que ya existen como
https://github.com/rgrove/lazyload
Problema: necesitamos una estructura de pares clave / valor para guardar nuestros datos
Solución : sugiero un objeto javascript en lugar de string / string air. Podemos beneficiarnos de la inteligencia de un IDE
Problema: los miembros generales deben almacenarse en un archivo público y todas las páginas deben acceder a ellos
Solución : para este propósito, creo una carpeta en la raíz de la aplicación web llamada Global_Resources y una carpeta para almacenar el archivo global para cada subcarpeta que llamamos 'Local_Resources'
Problema: cada miembro de subsistemas / subcarpetas / módulos debe anular a los miembros de Global_Resources en su alcance
Solución : consideré un archivo para cada
Estructura de la aplicación
root/
Global_Resources/
default.js
default.fr.js
UserManagementSystem/
Local_Resources/
default.js
default.fr.js
createUser.js
Login.htm
CreateUser.htm
El código correspondiente para los archivos:
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"
};
El archivo de recursos para el idioma deseado debe cargarse en la página seleccionada de Global_Resource: este debe ser el primer archivo que se carga en todas las páginas.
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";
archivo manager.js (este archivo debe cargarse al final)
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");
Espero eso ayude :)