Quando ti trovi di fronte a un problema da risolvere (e francamente, chi non lo è di questi tempi?), La strategia di base solitamente adottata da noi computer è chiamata "divide et impera". Funziona così:
- Concettualizza il problema specifico come un insieme di sotto-problemi più piccoli.
- Risolvi ogni piccolo problema.
- Combina i risultati in una soluzione del problema specifico.
Ma "divide et impera" non è l'unica strategia possibile. Possiamo anche adottare un approccio più generalista:
- Concettualizza il problema specifico come un caso speciale di un problema più generale.
- In qualche modo risolvi il problema generale.
- Adattare la soluzione del problema generale al problema specifico.
- Eric Lippert
Credo che esistano già molte soluzioni per questo problema nei linguaggi lato server come ASP.Net/C#.
Ho delineato alcuni degli aspetti principali del problema
ex. res.de.js, res.fr.js, res.en.js, res.js (per la lingua predefinita)
Problema: i file di risorse per ogni pagina devono essere separati in modo da ottenere solo i dati di cui abbiamo bisogno
Soluzione : possiamo utilizzare alcuni strumenti già esistenti come
https://github.com/rgrove/lazyload
Problema: abbiamo bisogno di una struttura di coppie chiave / valore per salvare i nostri dati
Soluzione : suggerisco un oggetto javascript invece di string / string air. Possiamo trarre vantaggio dall'intellisense di un IDE
Problema: i membri generali dovrebbero essere archiviati in un file pubblico e tutte le pagine dovrebbero accedervi
Soluzione : a questo scopo creo una cartella nella radice dell'applicazione web chiamata Global_Resources e una cartella per memorizzare il file globale per ogni sottocartella l'abbiamo chiamata 'Local_Resources'
Problema: ogni membro di sottosistemi / sottocartelle / moduli deve sovrascrivere i membri Global_Resources nel proprio ambito
Soluzione : ho considerato un file per ciascuno
Struttura dell'applicazione
root/
Global_Resources/
default.js
default.fr.js
UserManagementSystem/
Local_Resources/
default.js
default.fr.js
createUser.js
Login.htm
CreateUser.htm
Il codice corrispondente per i file:
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"
};
Il file di risorse per la lingua desiderata dovrebbe essere caricato sulla pagina selezionata da Global_Resource - Questo dovrebbe essere il primo file che viene caricato su tutte le pagine.
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";
file manager.js (questo file dovrebbe essere caricato per ultimo)
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");
Spero che sia d'aiuto :)